{"id":4497,"date":"2022-07-26T06:55:51","date_gmt":"2022-07-26T12:55:51","guid":{"rendered":"https:\/\/wpengine.com\/builders\/?p=4497"},"modified":"2023-04-14T09:57:38","modified_gmt":"2023-04-14T15:57:38","slug":"block-locking-api","status":"publish","type":"post","link":"https:\/\/wpengine.com\/builders\/block-locking-api\/","title":{"rendered":"Unlock the Power of the Block Locking API"},"content":{"rendered":"\n<p>Since the introduction of &#8220;blocks&#8221; in WordPress, there have been calls for more control over how users manage and interact with this type of content. One common concern is that users might inadvertently delete or move blocks, destroying carefully crafted page layouts. Block locking goes a long way to alleviate this potential issue and curate the editing experience within WordPress.<\/p>\n\n\n\n<p>In this article, we will explore the block locking API, how to implement locking in a real-world example, and discuss ways to extend this functionality by restricting&nbsp;<em>who<\/em>&nbsp;can lock and unlock blocks. Let\u2019s get started!<\/p>\n\n\n\n<p><em>Feel free to watch the video version of this article or continue reading. <br><\/em><\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Unlocking the Block Locking API in WordPress\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/dyd0mGPZyeI?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<div class=\"wp-block-group has-polar-background-color has-background is-layout-flow wp-container-core-group-is-layout-2c003d4a wp-block-group-is-layout-flow\" style=\"margin-bottom:50px;padding-top:30px;padding-right:30px;padding-bottom:30px;padding-left:30px\">\n<p class=\"has-large-font-size\"><strong>Table of Contents<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"#background\">Background<\/a><\/li><li><a href=\"#why-lock-blocks\">Why Lock Blocks?<\/a><\/li><li><a href=\"#block-locking-example\">Implementing Block Locking<\/a><\/li><li><a href=\"#restrict-locking-unlocking\">Restrict Locking and Unlocking<\/a><\/li><li><a href=\"#restrict-access-to-code-editor\">Bonus: Restrict Access to the Code Editor<\/a><\/li><\/ul>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"background\">Background<\/h2>\n\n\n\n<p>Introduced in WordPress 5.9, the block locking API allows you to restrict the movement and removal of blocks in the Editor. Originally designed for use in templates, template parts, and patterns, you simply need to apply the <code>lock<\/code> attribute to the markup of any block. This attribute has two options <code>move<\/code> and <code>remove<\/code>. When the options are set to <code>true<\/code>, the block cannot be moved or removed respectively. <\/p>\n\n\n\n<p>The complete markup on a Paragraph block would look something like this:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml shcb-code-table shcb-line-numbers\"><mark class='shcb-loc'><span><span class=\"hljs-comment\">&lt;!-- wp:paragraph {\"lock\":{\"move\":true,\"remove\":true}} --&gt;<\/span>\n<\/span><\/mark><span class='shcb-loc'><span><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">p<\/span>&gt;<\/span> ... <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">p<\/span>&gt;<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">&lt;!-- \/wp:paragraph --&gt;<\/span>\n<\/span><\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>This implementation was a big step forward, but there was no way to lock blocks from within the Editor unless you opened the Code Editor and modified the block markup directly. This restricted block locking to more advanced users such as developers and theme designers.<\/p>\n\n\n\n<p>WordPress 6.0 enhanced this functionality by adding a simple user interface (UI) in the Editor. When opening the options menu on any block, you will now see the &#8220;Lock&#8221; option. Selecting this option will display a modal allowing you to configure lock settings for the current block. Once enabled, the <code>lock<\/code> attribute is set and the block can no longer be moved or removed.<\/p>\n\n\n\n<p>It&#8217;s important to note that by default, anyone with access to the Editor can both lock <strong>and<\/strong> unlock blocks. We will see how to restrict the locking UI to specific users later in this article. <\/p>\n\n\n\n<figure class=\"wp-block-image alignwide size-full is-style-border\"><img loading=\"lazy\" decoding=\"async\" width=\"1575\" height=\"690\" src=\"https:\/\/wpengine.com\/builders\/wp-content\/uploads\/block-locking-example.gif\" alt=\"Accessing the block locking UI in WordPress.\" class=\"wp-image-4527\"\/><figcaption class=\"wp-element-caption\">Accessing the block locking UI in WordPress.<\/figcaption><\/figure>\n\n\n\n<p>More functionality is planned for WordPress 6.1, including the ability to lock all inner blocks at once, which is visible in the gif above. This feature is currently available for testing on Group, Column, and Cover blocks in the <a href=\"https:\/\/wordpress.org\/plugins\/gutenberg\/\" target=\"_blank\" rel=\"noreferrer noopener\">Gutenberg plugin<\/a>. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"why-lock-blocks\">Why Lock Blocks?<\/h2>\n\n\n\n<h4 class=\"wp-block-heading\">Editor Curation<\/h4>\n\n\n\n<p>There are many reasons to prevent the movement and removal of specific blocks, but the most common application is to restrict functionality for end users. In other words, curate the editing experience within WordPress.<\/p>\n\n\n\n<p>When designing websites for clients or when a website has many editors, providing some guardrails to content creation and site management is often a prerequisite. An unrestricted Editor can complicate things, especially in maintaining brand guidelines, ensuring content consistency, and preventing inadvertent mistakes.<\/p>\n\n\n\n<p>By allowing blocks to be locked, agencies and freelancers can now deliver predesigned patterns and templates to clients that, while editable, cannot be easily manipulated. Coupled with other <a href=\"https:\/\/developer.wordpress.org\/block-editor\/how-to-guides\/curating-the-editor-experience\/\" target=\"_blank\" rel=\"noreferrer noopener\">curation techniques<\/a>, block locking brings a degree of control back to the website builders and owners. <\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Personal Workflow<\/h4>\n\n\n\n<p>Not an agency or freelancer? Locking blocks can also help level up your personal workflow within WordPress. <\/p>\n\n\n\n<p>Many applications such as Adobe Photoshop, Figma, and Sketch allow you to lock layers and assets. Locking prevents you from mistakenly moving or deleting content, especially when dealing with complex layouts.<\/p>\n\n\n\n<p>The WordPress Editor can get equally complicated depending on the design with multiple layers of nested blocks. As you design a layout within the Editor, it&#8217;s often helpful to quickly lock blocks you&#8217;re happy with to avoid accidental edits. Give it a try! <\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"block-locking-example\">Block Locking Example<\/h2>\n\n\n\n<p>While we have discussed the background of this functionality and why you might want to employ locking in your next project, let&#8217;s take a look at a real-world example. <\/p>\n\n\n\n<p>In the following screenshot, we have the design for a testimonial block pattern. Notice that the layout is fairly complicated with multiple levels of nested blocks. We want users to be able to edit the testimonials but not break the design by moving or removing important blocks. <\/p>\n\n\n\n<figure class=\"wp-block-image alignwide size-full is-style-border\"><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"639\" src=\"https:\/\/wpengine.com\/builders\/wp-content\/uploads\/block-locking-testimonials-pattern.png\" alt=\"An example testimonials layout that utilizes block locking.\" class=\"wp-image-4507\" srcset=\"https:\/\/wpengine.com\/builders\/wp-content\/uploads\/block-locking-testimonials-pattern.png 1920w, https:\/\/wpengine.com\/builders\/wp-content\/uploads\/block-locking-testimonials-pattern-300x100.png 300w, https:\/\/wpengine.com\/builders\/wp-content\/uploads\/block-locking-testimonials-pattern-1024x341.png 1024w, https:\/\/wpengine.com\/builders\/wp-content\/uploads\/block-locking-testimonials-pattern-768x256.png 768w, https:\/\/wpengine.com\/builders\/wp-content\/uploads\/block-locking-testimonials-pattern-1536x511.png 1536w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><figcaption class=\"wp-element-caption\">An example testimonials layout that utilizes block locking.<\/figcaption><\/figure>\n\n\n\n<p>The pattern is primarily comprised of a Columns block with three columns. For each Column block, we have restricted removal, but not the movement. This allows the users to change the order of the testimonials but not delete them. The bock markup for this <code>lock<\/code> attribute configuration looks like this:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml shcb-code-table shcb-line-numbers\"><mark class='shcb-loc'><span><span class=\"hljs-comment\">&lt;!-- wp:column {\"lock\":{\"move\":false,\"remove\":true}} --&gt;<\/span>\n<\/span><\/mark><span class='shcb-loc'><span><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"wp-block-column\"<\/span>&gt;<\/span> ... <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">&lt;!-- \/wp:column --&gt;<\/span>\n<\/span><\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Every other block inside of each Column block is fully locked. The complete block markup for this testimonials layout is presented below as a complete pattern. The locking attribute on each block has been highlighted.<\/p>\n\n\n\n<div class=\"wp-block-group is-layout-flow wp-container-core-group-is-layout-47e5a185 wp-block-group-is-layout-flow\">\n<div class=\"wp-block-group has-polar-background-color has-background is-content-justification-center is-nowrap is-layout-flex wp-container-core-group-is-layout-931901aa wp-block-group-is-layout-flex\" style=\"padding-top:10px;padding-bottom:10px\">\n<p><code><strong>patterns\/testimonials.php<\/strong><\/code><\/p>\n<\/div>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml shcb-code-table shcb-line-numbers\"><span class='shcb-loc'><span><span class=\"php\"><span class=\"hljs-meta\">&lt;?php<\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"php\"><span class=\"hljs-comment\">\/**<\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"php\"><span class=\"hljs-comment\"> * Title: Testimonials<\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"php\"><span class=\"hljs-comment\"> * Slug: twentytwentytwo\/testimonials<\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"php\"><span class=\"hljs-comment\"> * Categories: columns<\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"php\"><span class=\"hljs-comment\"> *\/<\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"php\"><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"php\"><span class=\"hljs-meta\">?&gt;<\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">&lt;!-- wp:group {\"align\":\"wide\",\"style\":{\"spacing\":{\"blockGap\":\"2rem\"}},\"layout\":{\"inherit\":false}} --&gt;<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"wp-block-group alignwide\"<\/span>&gt;<\/span><span class=\"hljs-comment\">&lt;!-- wp:heading {\"textAlign\":\"center\",\"style\":{\"typography\":{\"fontStyle\":\"normal\",\"fontWeight\":\"500\"}},\"fontSize\":\"x-large\"} --&gt;<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">h2<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"has-text-align-center has-x-large-font-size\"<\/span> <span class=\"hljs-attr\">style<\/span>=<span class=\"hljs-string\">\"font-style:normal;font-weight:500\"<\/span>&gt;<\/span><span class=\"php\"><span class=\"hljs-meta\">&lt;?php<\/span> <span class=\"hljs-keyword\">echo<\/span> esc_html( <span class=\"hljs-string\">'What Our Customers Are Saying'<\/span>, <span class=\"hljs-string\">'twentytwentytwo'<\/span> ); <span class=\"hljs-meta\">?&gt;<\/span><\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">h2<\/span>&gt;<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">&lt;!-- \/wp:heading --&gt;<\/span>\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">&lt;!-- wp:columns {\"align\":\"wide\",\"style\":{\"spacing\":{\"blockGap\":\"2rem\",\"margin\":{\"top\":\"3rem\"}}}} --&gt;<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"wp-block-columns alignwide\"<\/span> <span class=\"hljs-attr\">style<\/span>=<span class=\"hljs-string\">\"margin-top:3rem\"<\/span>&gt;<\/span><span class=\"hljs-comment\">&lt;!-- wp:column {&lt;mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-tiffany-color\"&gt;\"lock\":{\"move\":false,\"remove\":true}&lt;\/mark&gt;,\"style\":{\"spacing\":{\"padding\":{\"top\":\"2rem\",\"right\":\"1.5rem\",\"bottom\":\"2rem\",\"left\":\"1rem\"}}},\"backgroundColor\":\"tertiary\",\"className\":\"box-shadow\\u002d\\u002ddefault\"} --&gt;<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"wp-block-column box-shadow--default has-tertiary-background-color has-background\"<\/span> <span class=\"hljs-attr\">style<\/span>=<span class=\"hljs-string\">\"padding-top:2rem;padding-right:1.5rem;padding-bottom:2rem;padding-left:1rem\"<\/span>&gt;<\/span><span class=\"hljs-comment\">&lt;!-- wp:quote {\"lock\":{\"move\":true,\"remove\":true},\"className\":\"is-style-plain\",\"fontSize\":\"small\"} --&gt;<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">blockquote<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"wp-block-quote is-style-plain has-small-font-size\"<\/span>&gt;<\/span><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">p<\/span>&gt;<\/span><span class=\"php\"><span class=\"hljs-meta\">&lt;?php<\/span> <span class=\"hljs-keyword\">echo<\/span> esc_html( <span class=\"hljs-string\">'Testimonial \u2014 Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus in tempus urna, at lacinia lectus. Cras aliquam neque et orci laoreet, eget lobortis sem tincidunt.'<\/span>, <span class=\"hljs-string\">'twentytwentytwo'<\/span> ); <span class=\"hljs-meta\">?&gt;<\/span><\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">p<\/span>&gt;<\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">blockquote<\/span>&gt;<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">&lt;!-- \/wp:quote --&gt;<\/span>\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><mark class='shcb-loc'><span><span class=\"hljs-comment\">&lt;!-- wp:group {\"lock\":{\"move\":true,\"remove\":true},\"style\":{\"spacing\":{\"blockGap\":\"1rem\",\"padding\":{\"right\":\"1rem\",\"left\":\"1rem\"}}},\"layout\":{\"type\":\"flex\",\"flexWrap\":\"nowrap\",\"justifyContent\":\"left\"}} --&gt;<\/span>\n<\/span><\/mark><span class='shcb-loc'><span><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"wp-block-group\"<\/span> <span class=\"hljs-attr\">style<\/span>=<span class=\"hljs-string\">\"padding-right:1rem;padding-left:1rem\"<\/span>&gt;<\/span><span class=\"hljs-comment\">&lt;!-- wp:image {&lt;mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-tiffany-color\"&gt;\"lock\":{\"move\":true,\"remove\":true}&lt;\/mark&gt;,\"width\":60,\"height\":60,\"style\":{\"border\":{\"radius\":\"100px\"},\"color\":{\"duotone\":&#91;\"#000097\",\"#ff4747\"]}},\"className\":\"size-full is-resized is-style-default\"} --&gt;<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">figure<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"wp-block-image is-resized size-full is-style-default\"<\/span> <span class=\"hljs-attr\">style<\/span>=<span class=\"hljs-string\">\"border-radius:100px\"<\/span>&gt;<\/span><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">img<\/span> <span class=\"hljs-attr\">src<\/span>=<span class=\"hljs-string\">\"&lt;?php echo esc_url( get_template_directory_uri() ); ?&gt;\/assets\/images\/icon-bird.jpg\"<\/span> <span class=\"hljs-attr\">alt<\/span>=<span class=\"hljs-string\">\"\"<\/span> <span class=\"hljs-attr\">width<\/span>=<span class=\"hljs-string\">\"60\"<\/span> <span class=\"hljs-attr\">height<\/span>=<span class=\"hljs-string\">\"60\"<\/span>\/&gt;<\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">figure<\/span>&gt;<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">&lt;!-- \/wp:image --&gt;<\/span>\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><mark class='shcb-loc'><span><span class=\"hljs-comment\">&lt;!-- wp:group {\"lock\":{\"move\":true,\"remove\":true},\"style\":{\"spacing\":{\"blockGap\":\"4px\",\"margin\":{\"bottom\":\"1rem\"}}}} --&gt;<\/span>\n<\/span><\/mark><span class='shcb-loc'><span><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"wp-block-group\"<\/span> <span class=\"hljs-attr\">style<\/span>=<span class=\"hljs-string\">\"margin-bottom:1rem\"<\/span>&gt;<\/span><span class=\"hljs-comment\">&lt;!-- wp:paragraph {\"placeholder\":\"First \\u0026 Last Name\",&lt;mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-tiffany-color\"&gt;\"lock\":{\"move\":true,\"remove\":true}&lt;\/mark&gt;,\"style\":{\"typography\":{\"fontStyle\":\"normal\",\"fontWeight\":\"600\",\"lineHeight\":\"1.5\"}},\"fontSize\":\"small\"} --&gt;<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">p<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"has-small-font-size\"<\/span> <span class=\"hljs-attr\">style<\/span>=<span class=\"hljs-string\">\"font-style:normal;font-weight:600;line-height:1.5\"<\/span>&gt;<\/span><span class=\"php\"><span class=\"hljs-meta\">&lt;?php<\/span> <span class=\"hljs-keyword\">echo<\/span> esc_html( <span class=\"hljs-string\">'First &amp; Last Name'<\/span>, <span class=\"hljs-string\">'twentytwentytwo'<\/span> ); <span class=\"hljs-meta\">?&gt;<\/span><\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">p<\/span>&gt;<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">&lt;!-- \/wp:paragraph --&gt;<\/span>\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><mark class='shcb-loc'><span><span class=\"hljs-comment\">&lt;!-- wp:paragraph {\"lock\":{\"move\":true,\"remove\":true},\"style\":{\"typography\":{\"textTransform\":\"uppercase\",\"fontSize\":\"0.75rem\"},\"color\":{\"text\":\"#666666\"}}} --&gt;<\/span>\n<\/span><\/mark><span class='shcb-loc'><span><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">p<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"has-text-color\"<\/span> <span class=\"hljs-attr\">style<\/span>=<span class=\"hljs-string\">\"color:#666666;font-size:0.75rem;text-transform:uppercase\"<\/span>&gt;<\/span><span class=\"php\"><span class=\"hljs-meta\">&lt;?php<\/span> <span class=\"hljs-keyword\">echo<\/span> esc_html( <span class=\"hljs-string\">'Testimonial Source'<\/span>, <span class=\"hljs-string\">'twentytwentytwo'<\/span> ); <span class=\"hljs-meta\">?&gt;<\/span><\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">p<\/span>&gt;<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">&lt;!-- \/wp:paragraph --&gt;<\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">&lt;!-- \/wp:group --&gt;<\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">&lt;!-- \/wp:group --&gt;<\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">&lt;!-- \/wp:column --&gt;<\/span>\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><mark class='shcb-loc'><span><span class=\"hljs-comment\">&lt;!-- wp:column {\"lock\":{\"move\":false,\"remove\":true},\"style\":{\"spacing\":{\"padding\":{\"top\":\"2rem\",\"right\":\"1.5rem\",\"bottom\":\"2rem\",\"left\":\"1rem\"}}},\"backgroundColor\":\"tertiary\",\"className\":\"box-shadow\\u002d\\u002ddefault\"} --&gt;<\/span>\n<\/span><\/mark><span class='shcb-loc'><span><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"wp-block-column box-shadow--default has-tertiary-background-color has-background\"<\/span> <span class=\"hljs-attr\">style<\/span>=<span class=\"hljs-string\">\"padding-top:2rem;padding-right:1.5rem;padding-bottom:2rem;padding-left:1rem\"<\/span>&gt;<\/span><span class=\"hljs-comment\">&lt;!-- wp:quote {&lt;mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-tiffany-color\"&gt;\"lock\":{\"move\":true,\"remove\":true}&lt;\/mark&gt;,\"className\":\"is-style-plain\",\"fontSize\":\"small\"} --&gt;<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">blockquote<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"wp-block-quote is-style-plain has-small-font-size\"<\/span>&gt;<\/span><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">p<\/span>&gt;<\/span><span class=\"php\"><span class=\"hljs-meta\">&lt;?php<\/span> <span class=\"hljs-keyword\">echo<\/span> esc_html( <span class=\"hljs-string\">'Testimonial \u2014 Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus in tempus urna, at lacinia lectus. Cras aliquam neque et orci laoreet, eget lobortis sem tincidunt.'<\/span>, <span class=\"hljs-string\">'twentytwentytwo'<\/span> ); <span class=\"hljs-meta\">?&gt;<\/span><\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">p<\/span>&gt;<\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">blockquote<\/span>&gt;<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">&lt;!-- \/wp:quote --&gt;<\/span>\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><mark class='shcb-loc'><span><span class=\"hljs-comment\">&lt;!-- wp:group {\"lock\":{\"move\":true,\"remove\":true},\"style\":{\"spacing\":{\"blockGap\":\"1rem\",\"padding\":{\"right\":\"1rem\",\"left\":\"1rem\"}}},\"layout\":{\"type\":\"flex\",\"flexWrap\":\"nowrap\",\"justifyContent\":\"left\"}} --&gt;<\/span>\n<\/span><\/mark><span class='shcb-loc'><span><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"wp-block-group\"<\/span> <span class=\"hljs-attr\">style<\/span>=<span class=\"hljs-string\">\"padding-right:1rem;padding-left:1rem\"<\/span>&gt;<\/span><span class=\"hljs-comment\">&lt;!-- wp:image {&lt;mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-tiffany-color\"&gt;\"lock\":{\"move\":true,\"remove\":true}&lt;\/mark&gt;,\"width\":60,\"height\":60,\"style\":{\"border\":{\"radius\":\"100px\"},\"color\":{\"duotone\":&#91;\"#a60072\",\"#67ff66\"]}},\"className\":\"size-full is-resized is-style-default\"} --&gt;<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">figure<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"wp-block-image is-resized size-full is-style-default\"<\/span> <span class=\"hljs-attr\">style<\/span>=<span class=\"hljs-string\">\"border-radius:100px\"<\/span>&gt;<\/span><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">img<\/span> <span class=\"hljs-attr\">src<\/span>=<span class=\"hljs-string\">\"&lt;?php echo esc_url( get_template_directory_uri() ); ?&gt;\/assets\/images\/icon-bird.jpg\"<\/span> <span class=\"hljs-attr\">alt<\/span>=<span class=\"hljs-string\">\"\"<\/span> <span class=\"hljs-attr\">width<\/span>=<span class=\"hljs-string\">\"60\"<\/span> <span class=\"hljs-attr\">height<\/span>=<span class=\"hljs-string\">\"60\"<\/span>\/&gt;<\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">figure<\/span>&gt;<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">&lt;!-- \/wp:image --&gt;<\/span>\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><mark class='shcb-loc'><span><span class=\"hljs-comment\">&lt;!-- wp:group {\"lock\":{\"move\":true,\"remove\":true},\"style\":{\"spacing\":{\"blockGap\":\"4px\",\"margin\":{\"bottom\":\"1rem\"}}}} --&gt;<\/span>\n<\/span><\/mark><span class='shcb-loc'><span><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"wp-block-group\"<\/span> <span class=\"hljs-attr\">style<\/span>=<span class=\"hljs-string\">\"margin-bottom:1rem\"<\/span>&gt;<\/span><span class=\"hljs-comment\">&lt;!-- wp:paragraph {\"placeholder\":\"First \\u0026 Last Name\",&lt;mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-tiffany-color\"&gt;\"lock\":{\"move\":true,\"remove\":true}&lt;\/mark&gt;,\"style\":{\"typography\":{\"fontStyle\":\"normal\",\"fontWeight\":\"600\",\"lineHeight\":\"1.5\"}},\"fontSize\":\"small\"} --&gt;<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">p<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"has-small-font-size\"<\/span> <span class=\"hljs-attr\">style<\/span>=<span class=\"hljs-string\">\"font-style:normal;font-weight:600;line-height:1.5\"<\/span>&gt;<\/span><span class=\"php\"><span class=\"hljs-meta\">&lt;?php<\/span> <span class=\"hljs-keyword\">echo<\/span> esc_html( <span class=\"hljs-string\">'First &amp; Last Name'<\/span>, <span class=\"hljs-string\">'twentytwentytwo'<\/span> ); <span class=\"hljs-meta\">?&gt;<\/span><\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">p<\/span>&gt;<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">&lt;!-- \/wp:paragraph --&gt;<\/span>\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><mark class='shcb-loc'><span><span class=\"hljs-comment\">&lt;!-- wp:paragraph {\"lock\":{\"move\":true,\"remove\":true},\"style\":{\"typography\":{\"textTransform\":\"uppercase\",\"fontSize\":\"0.75rem\"},\"color\":{\"text\":\"#666666\"}}} --&gt;<\/span>\n<\/span><\/mark><span class='shcb-loc'><span><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">p<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"has-text-color\"<\/span> <span class=\"hljs-attr\">style<\/span>=<span class=\"hljs-string\">\"color:#666666;font-size:0.75rem;text-transform:uppercase\"<\/span>&gt;<\/span><span class=\"php\"><span class=\"hljs-meta\">&lt;?php<\/span> <span class=\"hljs-keyword\">echo<\/span> esc_html( <span class=\"hljs-string\">'Testimonial Source'<\/span>, <span class=\"hljs-string\">'twentytwentytwo'<\/span> ); <span class=\"hljs-meta\">?&gt;<\/span><\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">p<\/span>&gt;<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">&lt;!-- \/wp:paragraph --&gt;<\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">&lt;!-- \/wp:group --&gt;<\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">&lt;!-- \/wp:group --&gt;<\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">&lt;!-- \/wp:column --&gt;<\/span>\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><mark class='shcb-loc'><span><span class=\"hljs-comment\">&lt;!-- wp:column {\"lock\":{\"move\":false,\"remove\":true},\"style\":{\"spacing\":{\"padding\":{\"top\":\"2rem\",\"right\":\"1.5rem\",\"bottom\":\"2rem\",\"left\":\"1rem\"}}},\"backgroundColor\":\"tertiary\",\"className\":\"box-shadow\\u002d\\u002ddefault\"} --&gt;<\/span>\n<\/span><\/mark><span class='shcb-loc'><span><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"wp-block-column box-shadow--default has-tertiary-background-color has-background\"<\/span> <span class=\"hljs-attr\">style<\/span>=<span class=\"hljs-string\">\"padding-top:2rem;padding-right:1.5rem;padding-bottom:2rem;padding-left:1rem\"<\/span>&gt;<\/span><span class=\"hljs-comment\">&lt;!-- wp:quote {&lt;mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-tiffany-color\"&gt;\"lock\":{\"move\":true,\"remove\":true}&lt;\/mark&gt;,\"className\":\"is-style-plain\",\"fontSize\":\"small\"} --&gt;<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">blockquote<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"wp-block-quote is-style-plain has-small-font-size\"<\/span>&gt;<\/span><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">p<\/span>&gt;<\/span><span class=\"php\"><span class=\"hljs-meta\">&lt;?php<\/span> <span class=\"hljs-keyword\">echo<\/span> esc_html( <span class=\"hljs-string\">'Testimonial \u2014 Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus in tempus urna, at lacinia lectus. Cras aliquam neque et orci laoreet, eget lobortis sem tincidunt.'<\/span>, <span class=\"hljs-string\">'twentytwentytwo'<\/span> ); <span class=\"hljs-meta\">?&gt;<\/span><\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">p<\/span>&gt;<\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">blockquote<\/span>&gt;<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">&lt;!-- \/wp:quote --&gt;<\/span>\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><mark class='shcb-loc'><span><span class=\"hljs-comment\">&lt;!-- wp:group {\"lock\":{\"move\":true,\"remove\":true},\"style\":{\"spacing\":{\"blockGap\":\"1rem\",\"padding\":{\"right\":\"1rem\",\"left\":\"1rem\"}}},\"layout\":{\"type\":\"flex\",\"flexWrap\":\"nowrap\",\"justifyContent\":\"left\"}} --&gt;<\/span>\n<\/span><\/mark><span class='shcb-loc'><span><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"wp-block-group\"<\/span> <span class=\"hljs-attr\">style<\/span>=<span class=\"hljs-string\">\"padding-right:1rem;padding-left:1rem\"<\/span>&gt;<\/span><span class=\"hljs-comment\">&lt;!-- wp:image {&lt;mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-tiffany-color\"&gt;\"lock\":{\"move\":true,\"remove\":true}&lt;\/mark&gt;,\"width\":60,\"height\":60,\"style\":{\"border\":{\"radius\":\"100px\"},\"color\":{\"duotone\":&#91;\"#c7005a\",\"#fff278\"]}},\"className\":\"size-full is-resized is-style-default\"} --&gt;<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">figure<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"wp-block-image is-resized size-full is-style-default\"<\/span> <span class=\"hljs-attr\">style<\/span>=<span class=\"hljs-string\">\"border-radius:100px\"<\/span>&gt;<\/span><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">img<\/span> <span class=\"hljs-attr\">src<\/span>=<span class=\"hljs-string\">\"&lt;?php echo esc_url( get_template_directory_uri() ); ?&gt;\/assets\/images\/icon-bird.jpg\"<\/span> <span class=\"hljs-attr\">alt<\/span>=<span class=\"hljs-string\">\"\"<\/span> <span class=\"hljs-attr\">width<\/span>=<span class=\"hljs-string\">\"60\"<\/span> <span class=\"hljs-attr\">height<\/span>=<span class=\"hljs-string\">\"60\"<\/span>\/&gt;<\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">figure<\/span>&gt;<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">&lt;!-- \/wp:image --&gt;<\/span>\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><mark class='shcb-loc'><span><span class=\"hljs-comment\">&lt;!-- wp:group {\"lock\":{\"move\":true,\"remove\":true},\"style\":{\"spacing\":{\"blockGap\":\"4px\",\"margin\":{\"bottom\":\"1rem\"}}}} --&gt;<\/span>\n<\/span><\/mark><span class='shcb-loc'><span><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"wp-block-group\"<\/span> <span class=\"hljs-attr\">style<\/span>=<span class=\"hljs-string\">\"margin-bottom:1rem\"<\/span>&gt;<\/span><span class=\"hljs-comment\">&lt;!-- wp:paragraph {\"placeholder\":\"First \\u0026 Last Name\",&lt;mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-tiffany-color\"&gt;\"lock\":{\"move\":true,\"remove\":true}&lt;\/mark&gt;,\"style\":{\"typography\":{\"fontStyle\":\"normal\",\"fontWeight\":\"600\",\"lineHeight\":\"1.5\"}},\"fontSize\":\"small\"} --&gt;<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">p<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"has-small-font-size\"<\/span> <span class=\"hljs-attr\">style<\/span>=<span class=\"hljs-string\">\"font-style:normal;font-weight:600;line-height:1.5\"<\/span>&gt;<\/span><span class=\"php\"><span class=\"hljs-meta\">&lt;?php<\/span> <span class=\"hljs-keyword\">echo<\/span> esc_html( <span class=\"hljs-string\">'First &amp; Last Name'<\/span>, <span class=\"hljs-string\">'twentytwentytwo'<\/span> ); <span class=\"hljs-meta\">?&gt;<\/span><\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">p<\/span>&gt;<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">&lt;!-- \/wp:paragraph --&gt;<\/span>\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><mark class='shcb-loc'><span><span class=\"hljs-comment\">&lt;!-- wp:paragraph {\"lock\":{\"move\":true,\"remove\":true},\"style\":{\"typography\":{\"textTransform\":\"uppercase\",\"fontSize\":\"0.75rem\"},\"color\":{\"text\":\"#666666\"}}} --&gt;<\/span>\n<\/span><\/mark><span class='shcb-loc'><span><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">p<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"has-text-color\"<\/span> <span class=\"hljs-attr\">style<\/span>=<span class=\"hljs-string\">\"color:#666666;font-size:0.75rem;text-transform:uppercase\"<\/span>&gt;<\/span><span class=\"php\"><span class=\"hljs-meta\">&lt;?php<\/span> <span class=\"hljs-keyword\">echo<\/span> esc_html( <span class=\"hljs-string\">'Testimonial Source'<\/span>, <span class=\"hljs-string\">'twentytwentytwo'<\/span> ); <span class=\"hljs-meta\">?&gt;<\/span><\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">p<\/span>&gt;<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">&lt;!-- \/wp:paragraph --&gt;<\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">&lt;!-- \/wp:group --&gt;<\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">&lt;!-- \/wp:group --&gt;<\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">&lt;!-- \/wp:column --&gt;<\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">&lt;!-- \/wp:columns --&gt;<\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">&lt;!-- \/wp:group --&gt;<\/span>\n<\/span><\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre><\/div>\n\n\n\n<p>To see this pattern in action, download the latest version of the <a href=\"https:\/\/wordpress.org\/themes\/twentytwentytwo\/\" target=\"_blank\" rel=\"noreferrer noopener\">Twenty Twenty-Two<\/a> theme. The pattern should work in nearly any block theme, yet it uses Twenty Twenty-Two&#8217;s image assets to display the default testimonial image. <\/p>\n\n\n\n<p>Note that while the theme registers all of its built-in patterns using the <code>register_block_pattern()<\/code> function, there is now a more straightforward method. Create a new folder named <code>patterns<\/code> in the root of the Twenty Twenty-Two directory and add the above code to a new file named <code>testimonials.php<\/code>. <\/p>\n\n\n\n<p>By placing the file in the <code>patterns<\/code> folder, WordPress will handle the registration process automatically. This new way of registering patterns in themes was added in WordPress 6.0. More information is available in this <a href=\"https:\/\/make.wordpress.org\/core\/2022\/05\/02\/new-features-for-working-with-patterns-and-themes-in-wordpress-6-0\/\" target=\"_blank\" rel=\"noreferrer noopener\">Developer Note<\/a>. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"restrict-locking-unlocking\">Restrict Locking and Unlocking<\/h2>\n\n\n\n<p>As noted above, any user who can edit blocks has the ability to both lock and unlock blocks. Given your WordPress implementation, this functionality might not be ideal. <\/p>\n\n\n\n<p>Consider the situation where carefully crafted brand-specific block patterns have been created for a client. Locking goes a long way to ensure content consistency, but these users can still unlock blocks at will. What if you could restrict the locking UI to only Administrators or specific users?<\/p>\n\n\n\n<p>The Editor setting <code>canLockBlocks<\/code> was included in WordPress 6.0, allowing you to restrict the locking UI globally or conditionally. You can set this setting using the filter <code>block_editor_settings_all<\/code>. By placing the following code example in the <code>functions.php<\/code> file of any theme, only Administrators will have access to the locking UI. <\/p>\n\n\n\n<div class=\"wp-block-group is-layout-flow wp-container-core-group-is-layout-47e5a185 wp-block-group-is-layout-flow\">\n<div class=\"wp-block-group has-polar-background-color has-background is-content-justification-center is-nowrap is-layout-flex wp-container-core-group-is-layout-931901aa wp-block-group-is-layout-flex\" style=\"padding-top:10px;padding-bottom:10px\">\n<p><code><strong>functions.php<\/strong><\/code><\/p>\n<\/div>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php shcb-code-table shcb-line-numbers\"><span class='shcb-loc'><span><span class=\"hljs-comment\">\/**<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\"> * Restrict access to the locking UI to Administrators.<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\"> * <\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\"> * <span class=\"hljs-doctag\">@param<\/span> array $settings Default editor settings.<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\"> * <span class=\"hljs-doctag\">@param<\/span> WP_Block_Editor_Context $context The current block editor context.<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\"> *\/<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">example_theme_restrict_locking_ui<\/span><span class=\"hljs-params\">( $settings, $context )<\/span> <\/span>{\n<\/span><\/span><span class='shcb-loc'><span>    $settings&#91; <span class=\"hljs-string\">'canLockBlocks'<\/span> ] = current_user_can( <span class=\"hljs-string\">'activate_plugins'<\/span> );\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>\t<span class=\"hljs-keyword\">return<\/span> $settings;\n<\/span><\/span><span class='shcb-loc'><span>}\n<\/span><\/span><span class='shcb-loc'><span>add_filter( <span class=\"hljs-string\">'block_editor_settings_all'<\/span>, <span class=\"hljs-string\">'example_theme_restrict_locking_ui'<\/span>, <span class=\"hljs-number\">10<\/span>, <span class=\"hljs-number\">2<\/span> );\n<\/span><\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre><\/div>\n\n\n\n<p>In the Editor, block locking will remain visible to Administrators but will be disabled for all other users thereby preventing them from unlocking any locked blocks. Notice that even though the user cannot see the locking UI, they still cannot remove the Column block in the right screenshot.<\/p>\n\n\n\n<figure class=\"wp-block-gallery alignwide has-nested-images columns-default is-cropped wp-block-gallery-5 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-full is-style-border\"><img loading=\"lazy\" decoding=\"async\" width=\"530\" height=\"380\" data-id=\"4506\" src=\"https:\/\/wpengine.com\/builders\/wp-content\/uploads\/block-locking-not-restricted.png\" alt=\"Block locking is available to all users.\" class=\"wp-image-4506\" srcset=\"https:\/\/wpengine.com\/builders\/wp-content\/uploads\/block-locking-not-restricted.png 530w, https:\/\/wpengine.com\/builders\/wp-content\/uploads\/block-locking-not-restricted-300x215.png 300w\" sizes=\"auto, (max-width: 530px) 100vw, 530px\" \/><figcaption class=\"wp-element-caption\">Block locking is available to all users.<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full is-style-border\"><img loading=\"lazy\" decoding=\"async\" width=\"530\" height=\"380\" data-id=\"4505\" src=\"https:\/\/wpengine.com\/builders\/wp-content\/uploads\/block-locking-restricted.png\" alt=\"The block locking UI is no longer available to non-Administrators.\" class=\"wp-image-4505\" srcset=\"https:\/\/wpengine.com\/builders\/wp-content\/uploads\/block-locking-restricted.png 530w, https:\/\/wpengine.com\/builders\/wp-content\/uploads\/block-locking-restricted-300x215.png 300w\" sizes=\"auto, (max-width: 530px) 100vw, 530px\" \/><figcaption class=\"wp-element-caption\">The block locking UI is no longer available to non-Administrators.<\/figcaption><\/figure>\n<\/figure>\n\n\n\n<p>This example checks the&nbsp;<a href=\"https:\/\/wordpress.org\/support\/article\/roles-and-capabilities\/\" target=\"_blank\" rel=\"noreferrer noopener\">capabilities<\/a>&nbsp;of the current user to determine if they are an Administrator. However, you can use any conditional. We are also disabling the locking UI for the &#8220;book&#8221; custom post type in this example.<\/p>\n\n\n\n<div class=\"wp-block-group is-layout-flow wp-container-core-group-is-layout-47e5a185 wp-block-group-is-layout-flow\">\n<div class=\"wp-block-group has-polar-background-color has-background is-content-justification-center is-nowrap is-layout-flex wp-container-core-group-is-layout-931901aa wp-block-group-is-layout-flex\" style=\"padding-top:10px;padding-bottom:10px\">\n<p><code><strong>functions.php<\/strong><\/code><\/p>\n<\/div>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php shcb-code-table shcb-line-numbers\"><span class='shcb-loc'><span><span class=\"hljs-comment\">\/**<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\"> * Restrict access to the locking UI to Administrators and <\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\"> * disable entirely on the \"book\" custom post type.<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\"> * <\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\"> * <span class=\"hljs-doctag\">@param<\/span> array $settings Default editor settings.<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\"> * <span class=\"hljs-doctag\">@param<\/span> WP_Block_Editor_Context $context The current block editor context.<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\"> *\/<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">example_theme_restrict_locking_ui<\/span><span class=\"hljs-params\">( $settings, $context )<\/span> <\/span>{\n<\/span><\/span><span class='shcb-loc'><span>    $is_administrator = current_user_can( <span class=\"hljs-string\">'activate_plugins'<\/span> );\n<\/span><\/span><span class='shcb-loc'><span>    $is_book          = $context-&gt;post &amp;&amp; $context-&gt;post-&gt;post_type === <span class=\"hljs-string\">'book'<\/span>;\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">if<\/span> ( $is_administrator || $is_book ) {\n<\/span><\/span><span class='shcb-loc'><span>        $settings&#91; <span class=\"hljs-string\">'canLockBlocks'<\/span> ] = <span class=\"hljs-keyword\">false<\/span>;\n<\/span><\/span><span class='shcb-loc'><span>    }\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>\t<span class=\"hljs-keyword\">return<\/span> $settings;\n<\/span><\/span><span class='shcb-loc'><span>}\n<\/span><\/span><span class='shcb-loc'><span>add_filter( <span class=\"hljs-string\">'block_editor_settings_all'<\/span>, <span class=\"hljs-string\">'example_theme_restrict_locking_ui'<\/span>, <span class=\"hljs-number\">10<\/span>, <span class=\"hljs-number\">2<\/span> );\n<\/span><\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"restrict-access-to-code-editor\">Bonus: Restrict Access to the Code Editor<\/h2>\n\n\n\n<p>We have shown that the <code>lock<\/code> attribute determines whether a block can be moved or removed. While we can hide the locking UI from specific users, anyone with access to the Editor will also have access to the Code Editor. The Code Editor displays the underlying block markup allowing anyone to manually modify <code>lock<\/code> attributes, which could be problematic.<\/p>\n\n\n\n<figure class=\"wp-block-image alignwide size-full is-style-border\"><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"570\" src=\"https:\/\/wpengine.com\/builders\/wp-content\/uploads\/block-locking-code-editor.png\" alt=\"Accessing the Code Editor in WordPress.\" class=\"wp-image-4526\" srcset=\"https:\/\/wpengine.com\/builders\/wp-content\/uploads\/block-locking-code-editor.png 1920w, https:\/\/wpengine.com\/builders\/wp-content\/uploads\/block-locking-code-editor-300x89.png 300w, https:\/\/wpengine.com\/builders\/wp-content\/uploads\/block-locking-code-editor-1024x304.png 1024w, https:\/\/wpengine.com\/builders\/wp-content\/uploads\/block-locking-code-editor-768x228.png 768w, https:\/\/wpengine.com\/builders\/wp-content\/uploads\/block-locking-code-editor-1536x456.png 1536w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><figcaption class=\"wp-element-caption\">Accessing the Code Editor in WordPress.<\/figcaption><\/figure>\n\n\n\n<p>Luckily it&#8217;s also possible to restrict access to the Code Editor using the Editor setting <code>codeEditingEnabled<\/code>. We can easily modify our code example to accomplish this. <\/p>\n\n\n\n<div class=\"wp-block-group is-layout-flow wp-container-core-group-is-layout-47e5a185 wp-block-group-is-layout-flow\">\n<div class=\"wp-block-group has-polar-background-color has-background is-content-justification-center is-nowrap is-layout-flex wp-container-core-group-is-layout-931901aa wp-block-group-is-layout-flex\" style=\"padding-top:10px;padding-bottom:10px\">\n<p><code><strong>functions.php<\/strong><\/code><\/p>\n<\/div>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php shcb-code-table shcb-line-numbers\"><span class='shcb-loc'><span><span class=\"hljs-comment\">\/**<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\"> * Restrict access to the locking UI and the Code Editor<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\"> * to Administrators.<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\"> * <\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\"> * <span class=\"hljs-doctag\">@param<\/span> array $settings Default editor settings.<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\"> * <span class=\"hljs-doctag\">@param<\/span> WP_Block_Editor_Context $context The current block editor context.<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\"> *\/<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">example_theme_restrict_locking_ui<\/span><span class=\"hljs-params\">( $settings, $context )<\/span> <\/span>{\n<\/span><\/span><span class='shcb-loc'><span>    $is_administrator = current_user_can( <span class=\"hljs-string\">'activate_plugins'<\/span> );\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">if<\/span> ( ! $is_administrator ) {\n<\/span><\/span><span class='shcb-loc'><span>        $settings&#91; <span class=\"hljs-string\">'canLockBlocks'<\/span> ] = <span class=\"hljs-keyword\">false<\/span>;\n<\/span><\/span><mark class='shcb-loc'><span>        $settings&#91; <span class=\"hljs-string\">'codeEditingEnabled'<\/span> ] = <span class=\"hljs-keyword\">false<\/span>;\n<\/span><\/mark><span class='shcb-loc'><span>    }\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>\t<span class=\"hljs-keyword\">return<\/span> $settings;\n<\/span><\/span><span class='shcb-loc'><span>}\n<\/span><\/span><span class='shcb-loc'><span>add_filter( <span class=\"hljs-string\">'block_editor_settings_all'<\/span>, <span class=\"hljs-string\">'example_theme_restrict_locking_ui'<\/span>, <span class=\"hljs-number\">10<\/span>, <span class=\"hljs-number\">2<\/span> );\n<\/span><\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre><\/div>\n\n\n\n<p>Only Administrators can now access the block locking UI and the Code Editor. This example can be modified with different conditionals depending on your implementation, but hopefully, this illustrates just how powerful the <code>block_editor_settings_all<\/code> can be.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"conclusion\">Conclusion<\/h2>\n\n\n\n<p>Block locking is a great way to control how content is managed in WordPress. The applications are endless, whether you are locking content to prevent accidental removal and movement in your own workflow or looking to restrict Editor functionality for users and clients. <\/p>\n\n\n\n<p>To learn more about additional ways to curate the editing experience in WordPress, check out our recent article on <a href=\"https:\/\/wpengine.com\/builders\/block-templates\/\">Block Templates<\/a> or this fantastic <a href=\"https:\/\/developer.wordpress.org\/block-editor\/how-to-guides\/curating-the-editor-experience\/\" target=\"_blank\" rel=\"noreferrer noopener\">Block Editor Handbook article<\/a> on the topic. You can also watch the online workshop recording of <a href=\"https:\/\/wordpress.tv\/2022\/07\/22\/nick-diego-curating-the-editor-experience\/\" target=\"_blank\" rel=\"noreferrer noopener\">Curating the Editor Experience<\/a>, which is available on WordPress.tv. <\/p>\n\n\n\n<p>External links referenced in this article and other related resources are listed below. Stay tuned for more articles on block theming, custom block development, and building with modern WordPress techniques.<\/p>\n\n\n\n<div class=\"wp-block-group has-polar-background-color has-background is-layout-flow wp-container-core-group-is-layout-f000365b wp-block-group-is-layout-flow\" style=\"padding-top:30px;padding-right:30px;padding-bottom:30px;padding-left:30px\">\n<p class=\"has-large-font-size\"><strong>External Resources<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/make.wordpress.org\/core\/2022\/05\/05\/block-locking-settings-in-wordpress-6-0\/\" target=\"_blank\" rel=\"noreferrer noopener\">Developer Note for the <code>canLockBlocks<\/code> setting<\/a><\/li><li><a href=\"https:\/\/make.wordpress.org\/core\/2022\/05\/02\/new-features-for-working-with-patterns-and-themes-in-wordpress-6-0\/\" target=\"_blank\" rel=\"noreferrer noopener\">Developer Note on registering patterns in themes<\/a><\/li><li><a href=\"https:\/\/developer.wordpress.org\/block-editor\/how-to-guides\/curating-the-editor-experience\/\" target=\"_blank\" rel=\"noreferrer noopener\">Block Editor Handbook article on curating the editor experience<\/a><\/li><li><a href=\"https:\/\/wordpress.tv\/2022\/07\/22\/nick-diego-curating-the-editor-experience\/\" target=\"_blank\" rel=\"noreferrer noopener\">WordPress.tv video: Curating the Editor Experience<\/a><\/li><li><a href=\"https:\/\/wordpress.org\/support\/article\/roles-and-capabilities\/\" target=\"_blank\" rel=\"noreferrer noopener\">Support article on roles and capabilities in WordPress<\/a><\/li><\/ul>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Effortlessly restrict block manipulation in the Editor.<\/p>\n","protected":false},"author":5,"featured_media":4528,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_EventAllDay":false,"_EventTimezone":"","_EventStartDate":"","_EventEndDate":"","_EventStartDateUTC":"","_EventEndDateUTC":"","_EventShowMap":false,"_EventShowMapLink":false,"_EventURL":"","_EventCost":"","_EventCostDescription":"","_EventCurrencySymbol":"","_EventCurrencyCode":"","_EventCurrencyPosition":"","_EventDateTimeSeparator":"","_EventTimeRangeSeparator":"","_EventOrganizerID":[],"_EventVenueID":[],"_OrganizerEmail":"","_OrganizerPhone":"","_OrganizerWebsite":"","_VenueAddress":"","_VenueCity":"","_VenueCountry":"","_VenueProvince":"","_VenueState":"","_VenueZip":"","_VenuePhone":"","_VenueURL":"","_VenueStateProvince":"","_VenueLat":"","_VenueLng":"","_VenueShowMap":false,"_VenueShowMapLink":false,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-4497","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-wordpress"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Unlock the Power of the WordPress Block Locking API<\/title>\n<meta name=\"description\" content=\"Learn how the WordPress block locking API can help you restrict the removal or movement of blocks in the Editor.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/wpengine.com\/builders\/block-locking-api\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Unlock the Power of the WordPress Block Locking API\" \/>\n<meta property=\"og:description\" content=\"Learn how the WordPress block locking API can help you restrict the removal or movement of blocks in the Editor.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/wpengine.com\/builders\/block-locking-api\/\" \/>\n<meta property=\"og:site_name\" content=\"Builders\" \/>\n<meta property=\"article:published_time\" content=\"2022-07-26T12:55:51+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-04-14T15:57:38+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/wpengine.com\/builders\/wp-content\/uploads\/block-locking-opengraph.jpeg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Nick Diego\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/wpengine.com\/builders\/wp-content\/uploads\/block-locking-opengraph.jpeg\" \/>\n<meta name=\"twitter:creator\" content=\"@nickmdiego\" \/>\n<meta name=\"twitter:site\" content=\"@wpebuilders\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Nick Diego\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/block-locking-api\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/block-locking-api\\\/\"},\"author\":{\"name\":\"Nick Diego\",\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/#\\\/schema\\\/person\\\/ec4573512f14a40d8ec517f312d1879b\"},\"headline\":\"Unlock the Power of the Block Locking API\",\"datePublished\":\"2022-07-26T12:55:51+00:00\",\"dateModified\":\"2023-04-14T15:57:38+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/block-locking-api\\\/\"},\"wordCount\":1447,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/block-locking-api\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/wp-content\\\/uploads\\\/block-locking-featured.jpg\",\"articleSection\":[\"WordPress\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/wpengine.com\\\/builders\\\/block-locking-api\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/block-locking-api\\\/\",\"url\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/block-locking-api\\\/\",\"name\":\"Unlock the Power of the WordPress Block Locking API\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/block-locking-api\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/block-locking-api\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/wp-content\\\/uploads\\\/block-locking-featured.jpg\",\"datePublished\":\"2022-07-26T12:55:51+00:00\",\"dateModified\":\"2023-04-14T15:57:38+00:00\",\"description\":\"Learn how the WordPress block locking API can help you restrict the removal or movement of blocks in the Editor.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/block-locking-api\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/wpengine.com\\\/builders\\\/block-locking-api\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/block-locking-api\\\/#primaryimage\",\"url\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/wp-content\\\/uploads\\\/block-locking-featured.jpg\",\"contentUrl\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/wp-content\\\/uploads\\\/block-locking-featured.jpg\",\"width\":1920,\"height\":1080},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/block-locking-api\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Unlock the Power of the Block Locking API\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/#website\",\"url\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/\",\"name\":\"Builders\",\"description\":\"Reimagining the way we build with WordPress.\",\"publisher\":{\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/#organization\",\"name\":\"WP Engine\",\"url\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/wp-content\\\/uploads\\\/2024\\\/05\\\/WP-Engine-Horizontal@2x.png\",\"contentUrl\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/wp-content\\\/uploads\\\/2024\\\/05\\\/WP-Engine-Horizontal@2x.png\",\"width\":348,\"height\":68,\"caption\":\"WP Engine\"},\"image\":{\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/x.com\\\/wpebuilders\",\"https:\\\/\\\/www.youtube.com\\\/channel\\\/UCh1WuL54XFb9ZI6m6goFv1g\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/#\\\/schema\\\/person\\\/ec4573512f14a40d8ec517f312d1879b\",\"name\":\"Nick Diego\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/9cf33028d58e055272db2100732089b772bb9887c69e916b06512473ed3e4861?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/9cf33028d58e055272db2100732089b772bb9887c69e916b06512473ed3e4861?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/9cf33028d58e055272db2100732089b772bb9887c69e916b06512473ed3e4861?s=96&d=mm&r=g\",\"caption\":\"Nick Diego\"},\"description\":\"Nick Diego is a Sr. Developer Advocate at WP Engine. He can be found creating educational content, building plugins and themes, and contributing to WordPress Core. Connect with him on Twitter, LinkedIn, or WordPress Slack.\",\"sameAs\":[\"https:\\\/\\\/x.com\\\/nickmdiego\"],\"url\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/author\\\/nick-diego\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Unlock the Power of the WordPress Block Locking API","description":"Learn how the WordPress block locking API can help you restrict the removal or movement of blocks in the Editor.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/wpengine.com\/builders\/block-locking-api\/","og_locale":"en_US","og_type":"article","og_title":"Unlock the Power of the WordPress Block Locking API","og_description":"Learn how the WordPress block locking API can help you restrict the removal or movement of blocks in the Editor.","og_url":"https:\/\/wpengine.com\/builders\/block-locking-api\/","og_site_name":"Builders","article_published_time":"2022-07-26T12:55:51+00:00","article_modified_time":"2023-04-14T15:57:38+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/wpengine.com\/builders\/wp-content\/uploads\/block-locking-opengraph.jpeg","type":"image\/jpeg"}],"author":"Nick Diego","twitter_card":"summary_large_image","twitter_image":"https:\/\/wpengine.com\/builders\/wp-content\/uploads\/block-locking-opengraph.jpeg","twitter_creator":"@nickmdiego","twitter_site":"@wpebuilders","twitter_misc":{"Written by":"Nick Diego","Est. reading time":"11 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/wpengine.com\/builders\/block-locking-api\/#article","isPartOf":{"@id":"https:\/\/wpengine.com\/builders\/block-locking-api\/"},"author":{"name":"Nick Diego","@id":"https:\/\/wpengine.com\/builders\/#\/schema\/person\/ec4573512f14a40d8ec517f312d1879b"},"headline":"Unlock the Power of the Block Locking API","datePublished":"2022-07-26T12:55:51+00:00","dateModified":"2023-04-14T15:57:38+00:00","mainEntityOfPage":{"@id":"https:\/\/wpengine.com\/builders\/block-locking-api\/"},"wordCount":1447,"commentCount":0,"publisher":{"@id":"https:\/\/wpengine.com\/builders\/#organization"},"image":{"@id":"https:\/\/wpengine.com\/builders\/block-locking-api\/#primaryimage"},"thumbnailUrl":"https:\/\/wpengine.com\/builders\/wp-content\/uploads\/block-locking-featured.jpg","articleSection":["WordPress"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/wpengine.com\/builders\/block-locking-api\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/wpengine.com\/builders\/block-locking-api\/","url":"https:\/\/wpengine.com\/builders\/block-locking-api\/","name":"Unlock the Power of the WordPress Block Locking API","isPartOf":{"@id":"https:\/\/wpengine.com\/builders\/#website"},"primaryImageOfPage":{"@id":"https:\/\/wpengine.com\/builders\/block-locking-api\/#primaryimage"},"image":{"@id":"https:\/\/wpengine.com\/builders\/block-locking-api\/#primaryimage"},"thumbnailUrl":"https:\/\/wpengine.com\/builders\/wp-content\/uploads\/block-locking-featured.jpg","datePublished":"2022-07-26T12:55:51+00:00","dateModified":"2023-04-14T15:57:38+00:00","description":"Learn how the WordPress block locking API can help you restrict the removal or movement of blocks in the Editor.","breadcrumb":{"@id":"https:\/\/wpengine.com\/builders\/block-locking-api\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/wpengine.com\/builders\/block-locking-api\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/wpengine.com\/builders\/block-locking-api\/#primaryimage","url":"https:\/\/wpengine.com\/builders\/wp-content\/uploads\/block-locking-featured.jpg","contentUrl":"https:\/\/wpengine.com\/builders\/wp-content\/uploads\/block-locking-featured.jpg","width":1920,"height":1080},{"@type":"BreadcrumbList","@id":"https:\/\/wpengine.com\/builders\/block-locking-api\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/wpengine.com\/builders\/"},{"@type":"ListItem","position":2,"name":"Unlock the Power of the Block Locking API"}]},{"@type":"WebSite","@id":"https:\/\/wpengine.com\/builders\/#website","url":"https:\/\/wpengine.com\/builders\/","name":"Builders","description":"Reimagining the way we build with WordPress.","publisher":{"@id":"https:\/\/wpengine.com\/builders\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/wpengine.com\/builders\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/wpengine.com\/builders\/#organization","name":"WP Engine","url":"https:\/\/wpengine.com\/builders\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/wpengine.com\/builders\/#\/schema\/logo\/image\/","url":"https:\/\/wpengine.com\/builders\/wp-content\/uploads\/2024\/05\/WP-Engine-Horizontal@2x.png","contentUrl":"https:\/\/wpengine.com\/builders\/wp-content\/uploads\/2024\/05\/WP-Engine-Horizontal@2x.png","width":348,"height":68,"caption":"WP Engine"},"image":{"@id":"https:\/\/wpengine.com\/builders\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/wpebuilders","https:\/\/www.youtube.com\/channel\/UCh1WuL54XFb9ZI6m6goFv1g"]},{"@type":"Person","@id":"https:\/\/wpengine.com\/builders\/#\/schema\/person\/ec4573512f14a40d8ec517f312d1879b","name":"Nick Diego","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/9cf33028d58e055272db2100732089b772bb9887c69e916b06512473ed3e4861?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/9cf33028d58e055272db2100732089b772bb9887c69e916b06512473ed3e4861?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/9cf33028d58e055272db2100732089b772bb9887c69e916b06512473ed3e4861?s=96&d=mm&r=g","caption":"Nick Diego"},"description":"Nick Diego is a Sr. Developer Advocate at WP Engine. He can be found creating educational content, building plugins and themes, and contributing to WordPress Core. Connect with him on Twitter, LinkedIn, or WordPress Slack.","sameAs":["https:\/\/x.com\/nickmdiego"],"url":"https:\/\/wpengine.com\/builders\/author\/nick-diego\/"}]}},"_links":{"self":[{"href":"https:\/\/wpengine.com\/builders\/wp-json\/wp\/v2\/posts\/4497","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wpengine.com\/builders\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wpengine.com\/builders\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wpengine.com\/builders\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/wpengine.com\/builders\/wp-json\/wp\/v2\/comments?post=4497"}],"version-history":[{"count":0,"href":"https:\/\/wpengine.com\/builders\/wp-json\/wp\/v2\/posts\/4497\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wpengine.com\/builders\/wp-json\/wp\/v2\/media\/4528"}],"wp:attachment":[{"href":"https:\/\/wpengine.com\/builders\/wp-json\/wp\/v2\/media?parent=4497"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wpengine.com\/builders\/wp-json\/wp\/v2\/categories?post=4497"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wpengine.com\/builders\/wp-json\/wp\/v2\/tags?post=4497"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}