{"id":4428,"date":"2022-07-13T08:00:00","date_gmt":"2022-07-13T14:00:00","guid":{"rendered":"https:\/\/wpengine.com\/builders\/?p=4428"},"modified":"2023-09-13T15:06:15","modified_gmt":"2023-09-13T20:06:15","slug":"block-templates","status":"publish","type":"post","link":"https:\/\/wpengine.com\/builders\/block-templates\/","title":{"rendered":"An Introduction to Block Templates"},"content":{"rendered":"\n<p>Create a new post or page in WordPress and you&#8217;re immediately presented with a blank canvas. This experience can be both empowering and daunting for users. While <a href=\"https:\/\/developer.wordpress.org\/block-editor\/reference-guides\/block-api\/block-patterns\/\" target=\"_blank\" rel=\"noreferrer noopener\">block patterns<\/a> go a long way in helping speed up and standardize content creation, being able to present users with a more curated editing experience can be beneficial. Enter block templates.<\/p>\n\n\n\n<p>In this article, you will learn what block templates are, what they aren&#8217;t, how to build them, and why you might want to use them on your next project. Let&#8217;s get started!<\/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-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\">\n<li><a href=\"https:\/\/wpengine.com\/builders\/block-templates\/#terminology\">Terminology<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wpengine.com\/builders\/block-templates\/#implementing-block-templates\">Implementing Block Templates<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wpengine.com\/builders\/block-templates\/#template-and-block-locking\">Template and Block Locking<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wpengine.com\/builders\/block-templates\/#complete-example\">Complete Example<\/a><\/li>\n<\/ul>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"terminology\">Terminology<\/h2>\n\n\n\n<p>Recently an article was posted on this very website titled, <a href=\"https:\/\/wpengine.com\/builders\/block-theme-templates\/\">An Overview of Block Theme Templates<\/a>. At first glance, it might seem like a repeat of the article you are reading now. Aren&#8217;t &#8220;Block Templates&#8221; and &#8220;Block Theme Templates&#8221; the same thing?<\/p>\n\n\n\n<p>The answer is no, but you would be forgiven for thinking otherwise. Terminology in WordPress can get quite tricky, which is why the discussion of block templates must begin with an explanation of what they aren&#8217;t.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Theme Templates<\/h4>\n\n\n\n<p><a href=\"https:\/\/developer.wordpress.org\/themes\/basics\/template-files\/\" target=\"_blank\" rel=\"noreferrer noopener\">Template files<\/a> are essentially the foundation of every WordPress theme. They determine how content is displayed to users. Traditionally written in PHP, standard theme templates include <code>single.php<\/code>, <code>page.php<\/code>, <code>search.php<\/code>, etc. In block themes, these template files are instead HTML and are comprised entirely of blocks, hence the term &#8220;Block Theme Templates.&#8221; <\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Block Templates<\/h4>\n\n\n\n<p><a href=\"https:\/\/developer.wordpress.org\/block-editor\/reference-guides\/block-api\/block-templates\/\" target=\"_blank\" rel=\"noreferrer noopener\">Block templates<\/a>, however, are collections of blocks used to define default initial states within the Editor. These blocks can have predefined attributes and placeholder content, much like block patterns. Admittedly, this definition is a bit confusing and is better illustrated with an example.<\/p>\n\n\n\n<p>Assume you have a website that publishes lots of content with a similar structure: an opening paragraph, table of contents, many sub-sections, etc. You have multiple content creators and need to ensure the format of each post is standardized. You could create a block pattern with these elements predefined that could be inserted into the post. While effective, this requires a user to insert the pattern manually. <\/p>\n\n\n\n<p>What if everything was set up automatically when a new post was created? In other words, what if you could define the <em>default initial state<\/em> for posts within the Editor? Extrapolate this functionality to custom post types and add locking functionality that limits users&#8217; ability to add or even remove certain blocks. All of a sudden, you have created a curated editing experience!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"implementing-block-templates\">Implementing Block Templates<\/h2>\n\n\n\n<p>Block templates can be created using either JavaScript or PHP. The JavaScript <a href=\"https:\/\/developer.wordpress.org\/block-editor\/reference-guides\/block-api\/block-templates\/#api\" target=\"_blank\" rel=\"noreferrer noopener\">implementation<\/a> is primarily used in custom block development where templates can be applied to the <code>&lt;InnerBlocks&gt;<\/code> component. While an interesting topic for discussion, it&#8217;s beyond the scope of this article. We will focus solely on PHP and applying block templates to post types. <\/p>\n\n\n\n<p>Posts, pages, and custom post types in WordPress support the <code>template<\/code> argument. This argument is where you define the block template that should be displayed in the Editor for the given post type. <code>template<\/code> is defined as an array of blocks, where each item of the array contains both the block name and any applied attributes. <\/p>\n\n\n\n<p>Below is a relatively simple block template that adds a Heading block that&#8217;s an H2 with some custom styling, followed by a Paragraph block.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" 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-string\">'template'<\/span> =&gt; <span class=\"hljs-keyword\">array<\/span>(\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">array<\/span>( <span class=\"hljs-string\">'core\/heading'<\/span>, <span class=\"hljs-keyword\">array<\/span>(\n<\/span><\/span><span class='shcb-loc'><span>        <span class=\"hljs-string\">'placeholder'<\/span> =&gt; <span class=\"hljs-string\">'Add Title...'<\/span>,\n<\/span><\/span><span class='shcb-loc'><span>        <span class=\"hljs-string\">'level'<\/span>       =&gt; <span class=\"hljs-number\">2<\/span>,\n<\/span><\/span><span class='shcb-loc'><span>        <span class=\"hljs-string\">'style'<\/span>       =&gt; <span class=\"hljs-keyword\">array<\/span>(\n<\/span><\/span><span class='shcb-loc'><span>            <span class=\"hljs-string\">'typography'<\/span> =&gt; <span class=\"hljs-keyword\">array<\/span>(\n<\/span><\/span><span class='shcb-loc'><span>                <span class=\"hljs-string\">'textTransform'<\/span> =&gt; <span class=\"hljs-string\">'uppercase'<\/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>    ) ),\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">array<\/span>( <span class=\"hljs-string\">'core\/paragraph'<\/span>, <span class=\"hljs-keyword\">array<\/span>(\n<\/span><\/span><span class='shcb-loc'><span>        <span class=\"hljs-string\">'placeholder'<\/span> =&gt; <span class=\"hljs-string\">'Add Description...'<\/span>,\n<\/span><\/span><span class='shcb-loc'><span>    ) ),\n<\/span><\/span><span class='shcb-loc'><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\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>As you might have guessed, building out block templates as arrays can quickly get complicated. You also have to know all of the attributes supported by the various blocks and the correct array structure for each. There is a handy workaround using the Pattern block that&#8217;s especially useful for more complicated templates.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">The Pattern Block &#8220;Trick&#8221; <\/h4>\n\n\n\n<p>While I&#8217;m calling this a &#8220;trick&#8221;, it&#8217;s a perfectly valid way to structure a block template and is likely the way most themes will implement this functionality. The idea is that we place our template in a pattern that uses normal HTML block markup allowing us to avoid complicated arrays. The pattern is then pulled into the block template using the Pattern block. The <code>template<\/code> would look something like this:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" 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-string\">'template'<\/span> =&gt; <span class=\"hljs-keyword\">array<\/span>(\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">array<\/span>( <span class=\"hljs-string\">'core\/pattern'<\/span>, <span class=\"hljs-keyword\">array<\/span>(\n<\/span><\/span><span class='shcb-loc'><span>        <span class=\"hljs-string\">'slug'<\/span> =&gt; <span class=\"hljs-string\">'example-theme\/custom-block-template-pattern'<\/span>,\n<\/span><\/span><span class='shcb-loc'><span>    ) ),\n<\/span><\/span><span class='shcb-loc'><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\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>We are still using an array of blocks to represent the block template; it just happens to be a single Pattern block. The Pattern block is designed for theme development, which allows you to reference a registered block pattern via a slug. In the Editor and frontend, the Pattern block itself will be replaced by the pattern it references.<\/p>\n\n\n\n<p>Block patterns have become synonymous with modern WordPress development, and there are many <a href=\"https:\/\/developer.wordpress.org\/block-editor\/reference-guides\/block-api\/block-patterns\/\" target=\"_blank\" rel=\"noreferrer noopener\">great resources<\/a> that show you how to build them, including <a href=\"https:\/\/wordpress.tv\/2022\/06\/13\/nick-diego-builder-basics-everything-you-need-to-know-about-patterns\/\" target=\"_blank\" rel=\"noreferrer noopener\">this video<\/a> from my recent Builder Basics series. Check out those links if you are unfamiliar with creating patterns.   <\/p>\n\n\n\n<p>Now that you know how to define a <code>template<\/code> argument and the Pattern block workaround, the block template actually has to get implemented. To do so depends on whether the post type already exists or you are registering a new custom post type. <\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Modifying an Existing Post Type<\/h4>\n\n\n\n<p>If you would like to add a block template to an existing post type, such as posts or pages, you will need to modify the post object and add the <code>template<\/code> argument. We can do this with a few lines of code that should generally be placed in the <code>functions.php<\/code> file of your theme. Below we have applied the template with our custom block pattern to all posts.<\/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-3\" 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\"> * Register custom block template for posts.<\/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_register_posts_block_template<\/span><span class=\"hljs-params\">()<\/span> <\/span>{\n<\/span><\/span><span class='shcb-loc'><span>    $post_type_object = get_post_type_object( <span class=\"hljs-string\">'post'<\/span> );\n<\/span><\/span><span class='shcb-loc'><span>    $post_type_object-&gt;template = <span class=\"hljs-keyword\">array<\/span>( \n<\/span><\/span><span class='shcb-loc'><span>        <span class=\"hljs-keyword\">array<\/span>( <span class=\"hljs-string\">'core\/pattern'<\/span>, <span class=\"hljs-keyword\">array<\/span>(\n<\/span><\/span><span class='shcb-loc'><span>            <span class=\"hljs-string\">'slug'<\/span> =&gt; <span class=\"hljs-string\">'example-theme\/custom-block-template-pattern'<\/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>}\n<\/span><\/span><span class='shcb-loc'><span>add_action( <span class=\"hljs-string\">'init'<\/span>, <span class=\"hljs-string\">'example_theme_register_posts_block_template'<\/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\">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<h4 class=\"wp-block-heading\">Registering a New Post Type<\/h4>\n\n\n\n<p>Block templates can also be defined during <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/register_post_type\/\" target=\"_blank\" rel=\"noreferrer noopener\">custom post type registration<\/a>. Below we are registering the post type &#8220;books,&#8221; and you can see how the <code>template<\/code> argument is defined along with everything else. <\/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\"> * Register custom block template for books.<\/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_register_book_post_type<\/span><span class=\"hljs-params\">()<\/span> <\/span>{\n<\/span><\/span><span class='shcb-loc'><span>    $args = <span class=\"hljs-keyword\">array<\/span>(\n<\/span><\/span><span class='shcb-loc'><span>        <span class=\"hljs-string\">'public'<\/span>       =&gt; <span class=\"hljs-keyword\">true<\/span>,\n<\/span><\/span><span class='shcb-loc'><span>        <span class=\"hljs-string\">'label'<\/span>        =&gt; <span class=\"hljs-string\">'Books'<\/span>,\n<\/span><\/span><span class='shcb-loc'><span>        <span class=\"hljs-string\">'show_in_rest'<\/span> =&gt; <span class=\"hljs-keyword\">true<\/span>,\n<\/span><\/span><span class='shcb-loc'><span>        <span class=\"hljs-string\">'template'<\/span>     =&gt; <span class=\"hljs-keyword\">array<\/span>(\n<\/span><\/span><span class='shcb-loc'><span>            <span class=\"hljs-keyword\">array<\/span>( <span class=\"hljs-string\">'core\/pattern'<\/span>, <span class=\"hljs-keyword\">array<\/span>(\n<\/span><\/span><span class='shcb-loc'><span>                <span class=\"hljs-string\">'slug'<\/span> =&gt; <span class=\"hljs-string\">'example-theme\/custom-block-template-pattern'<\/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\t<span class=\"hljs-string\">'hierarchical'<\/span>  =&gt; <span class=\"hljs-keyword\">true<\/span>,\n<\/span><\/span><span class='shcb-loc'><span>\t\t<span class=\"hljs-string\">'supports'<\/span>      =&gt; <span class=\"hljs-keyword\">array<\/span>( <span class=\"hljs-string\">'title'<\/span>, <span class=\"hljs-string\">'editor'<\/span>, <span class=\"hljs-string\">'page-attributes'<\/span> ),\n<\/span><\/span><span class='shcb-loc'><span>    );\n<\/span><\/span><span class='shcb-loc'><span>    register_post_type( <span class=\"hljs-string\">'book'<\/span>, $args );\n<\/span><\/span><span class='shcb-loc'><span>}\n<\/span><\/span><span class='shcb-loc'><span>add_action( <span class=\"hljs-string\">'init'<\/span>, <span class=\"hljs-string\">'example_theme_register_book_post_type'<\/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<h2 class=\"wp-block-heading\" id=\"template-and-block-locking\">Template and Block Locking<\/h2>\n\n\n\n<p>Controlling the default editing state for post types is powerful, yet users can still move, add, or remove blocks. This can be problematic in certain situations, and <a href=\"https:\/\/developer.wordpress.org\/block-editor\/reference-guides\/block-api\/block-templates\/#locking\" target=\"_blank\" rel=\"noreferrer noopener\">template locking<\/a> allows you to restrict this functionality. <\/p>\n\n\n\n<p>In addition to the <code>template<\/code> argument, you can specify the <code>template_lock<\/code> argument, which takes the value <code>all<\/code> or <code>insert<\/code>. When set to <code>all<\/code>, no new blocks can be inserted, and blocks that are part of the block template cannot be moved or removed. When set to <code>insert<\/code>, no new blocks can be inserted, but existing blocks can move freely and be removed.<\/p>\n\n\n\n<p>In addition to locking the entire template, you can also lock individual blocks. WordPress 6.0 made block locking even easier by exposing it in the Editor UI. <\/p>\n\n\n\n<figure class=\"wp-block-image alignwide size-full is-style-border\"><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"1080\" src=\"https:\/\/wpengine.com\/builders\/wp-content\/uploads\/block-locking.jpg\" alt=\"Locking blocks using the Editor UI.\" class=\"wp-image-4484\" srcset=\"https:\/\/wpengine.com\/builders\/wp-content\/uploads\/block-locking.jpg 1920w, https:\/\/wpengine.com\/builders\/wp-content\/uploads\/block-locking-300x169.jpg 300w, https:\/\/wpengine.com\/builders\/wp-content\/uploads\/block-locking-1024x576.jpg 1024w, https:\/\/wpengine.com\/builders\/wp-content\/uploads\/block-locking-768x432.jpg 768w, https:\/\/wpengine.com\/builders\/wp-content\/uploads\/block-locking-1536x864.jpg 1536w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><figcaption class=\"wp-element-caption\">Locking blocks using the Editor UI.<\/figcaption><\/figure>\n\n\n\n<p>When defining a block template, you can apply the <code>lock<\/code> attribute to any block. This attribute has two options <code>move<\/code> and <code>remove<\/code>. When the options are <code>true<\/code>, the block cannot be moved or removed respectively. 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-5\" 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=\"hljs-comment\">&lt;!-- wp:paragraph {\"lock\":{\"move\":true,\"remove\":true}} --&gt;<\/span>\n<\/span><\/span><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-5\"><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>You can also combine block and template locking depending on your use case. Note that block locking takes precedence over template locking when determining if a block can be moved or removed. We will use block locking extensively in the following example.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"complete-example\">Complete Example<\/h2>\n\n\n\n<p>Let&#8217;s put everything together in a complete example using the <a href=\"https:\/\/wordpress.org\/themes\/twentytwentytwo\/\" target=\"_blank\" rel=\"noreferrer noopener\">Twenty Twenty-Two<\/a> theme. The goal is to provide a custom block template for the &#8220;book&#8221; custom post type. We want to present users with a locked set of blocks that allows them to set the book name, author, featured image, book description, and a button link to &#8220;Start Reading&#8221;. We will use the Pattern block approach as well as block locking. The end result will look something like this: <\/p>\n\n\n\n<figure class=\"wp-block-image alignwide size-full is-style-border\"><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"1015\" src=\"https:\/\/wpengine.com\/builders\/wp-content\/uploads\/book-block-template-final.jpg\" alt=\"A simple block template for books.\" class=\"wp-image-4483\" srcset=\"https:\/\/wpengine.com\/builders\/wp-content\/uploads\/book-block-template-final.jpg 1920w, https:\/\/wpengine.com\/builders\/wp-content\/uploads\/book-block-template-final-300x159.jpg 300w, https:\/\/wpengine.com\/builders\/wp-content\/uploads\/book-block-template-final-1024x541.jpg 1024w, https:\/\/wpengine.com\/builders\/wp-content\/uploads\/book-block-template-final-768x406.jpg 768w, https:\/\/wpengine.com\/builders\/wp-content\/uploads\/book-block-template-final-1536x812.jpg 1536w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><figcaption class=\"wp-element-caption\"> A simple block template for books.<\/figcaption><\/figure>\n\n\n\n<p>Since we will use the Pattern block method, we&#8217;ll start by registering the block pattern. Twenty Twenty-Two is a block theme, so we can place the pattern file within the <code>patterns\/<\/code> directory and WordPress will register it for us. <\/p>\n\n\n\n<p>When creating patterns, it&#8217;s often best to design them directly in the Editor and copy the block markup into the pattern file. Writing block markup by hand is tedious and prone to error.<\/p>\n\n\n\n<p>The file below is our complete pattern used for the block template. Note that we have restricted this pattern from being displayed in Inserter by setting <code>Inserter: false<\/code>. We don&#8217;t want users to be able to insert this pattern manually. It should only be served by the block pattern for books.<\/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\/book-block-template.php<\/strong><\/code><\/p>\n<\/div>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" 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: A block template for books<\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"php\"><span class=\"hljs-comment\"> * Slug: example-theme\/book-block-template<\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"php\"><span class=\"hljs-comment\"> * Inserter: false<\/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:columns {\"lock\":{\"move\":true,\"remove\":true},\"align\":\"wide\",\"style\":{\"spacing\":{\"blockGap\":\"40px\"}}} --&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>&gt;<\/span>\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">&lt;!-- wp:column {\"width\":\"33.33%\",\"lock\":{\"move\":true,\"remove\":true}} --&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\"<\/span> <span class=\"hljs-attr\">style<\/span>=<span class=\"hljs-string\">\"flex-basis:33.33%\"<\/span>&gt;<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">&lt;!-- wp:post-featured-image {\"lock\":{\"move\":true,\"remove\":true}} \/--&gt;<\/span>\n<\/span><\/span><span class='shcb-loc'><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><span class='shcb-loc'><span><span class=\"hljs-comment\">&lt;!-- wp:column {\"width\":\"66.66%\",\"lock\":{\"move\":true,\"remove\":true},\"style\":{\"spacing\":{\"padding\":{\"top\":\"40px\",\"right\":\"40px\",\"bottom\":\"40px\",\"left\":\"40px\"}}},\"backgroundColor\":\"tertiary\"} --&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 has-tertiary-background-color has-background\"<\/span> <span class=\"hljs-attr\">style<\/span>=<span class=\"hljs-string\">\"padding-top:40px;padding-right:40px;padding-bottom:40px;padding-left:40px;flex-basis:66.66%\"<\/span>&gt;<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">&lt;!-- wp:group {\"lock\":{\"move\":true,\"remove\":true},\"style\":{\"spacing\":{\"blockGap\":\"10px\"}}} --&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\"<\/span>&gt;<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">&lt;!-- wp:post-title {\"lock\":{\"move\":true,\"remove\":true},\"fontSize\":\"x-large\"} \/--&gt;<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">&lt;!-- wp:paragraph {\"placeholder\":\"Author Name\",\"lock\":{\"move\":true,\"remove\":true},\"style\":{\"typography\":{\"fontStyle\":\"normal\",\"fontWeight\":\"500\"}},\"fontSize\":\"medium\"} --&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-medium-font-size\"<\/span> <span class=\"hljs-attr\">style<\/span>=<span class=\"hljs-string\">\"font-style:normal;font-weight:500\"<\/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><span class='shcb-loc'><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><span class='shcb-loc'><span><span class=\"hljs-comment\">&lt;!-- wp:paragraph {\"placeholder\":\"Book Description \u2014 Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut sollicitudin finibus mauris, in tincidunt arcu pharetra et. Nulla lorem urna, viverra sed luctus non, hendrerit nec ligula. Nam in mollis turpis. Curabitur tincidunt mollis metus sit amet dictum.\",\"lock\":{\"move\":true,\"remove\":true}} --<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">&lt;p&gt;&lt;\/p&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><span class=\"hljs-comment\">&lt;!-- wp:buttons {\"lock\":{\"move\":true,\"remove\":true}} --&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-buttons\"<\/span>&gt;<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\">&lt;!-- wp:button --&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-button\"<\/span>&gt;<\/span><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">a<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"wp-block-button__link wp-element-button\"<\/span>&gt;<\/span>Start Reading<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">a<\/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:button --&gt;<\/span>\n<\/span><\/span><span class='shcb-loc'><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:buttons --&gt;<\/span>\n<\/span><\/span><span class='shcb-loc'><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><span class='shcb-loc'><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>\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\">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>Next, we must register the custom post type for &#8220;book&#8221; and apply the pattern as a block template. The code is virtually identical to the example presented above, but we must ensure the pattern slug is set to <code>example-theme\/book-block-template<\/code>.<\/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\"> * Register custom block template for books.<\/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_register_book_post_type<\/span><span class=\"hljs-params\">()<\/span> <\/span>{\n<\/span><\/span><span class='shcb-loc'><span>    $args = <span class=\"hljs-keyword\">array<\/span>(\n<\/span><\/span><span class='shcb-loc'><span>        <span class=\"hljs-string\">'public'<\/span>       =&gt; <span class=\"hljs-keyword\">true<\/span>,\n<\/span><\/span><span class='shcb-loc'><span>        <span class=\"hljs-string\">'label'<\/span>        =&gt; <span class=\"hljs-string\">'Books'<\/span>,\n<\/span><\/span><span class='shcb-loc'><span>        <span class=\"hljs-string\">'show_in_rest'<\/span> =&gt; <span class=\"hljs-keyword\">true<\/span>,\n<\/span><\/span><span class='shcb-loc'><span>        <span class=\"hljs-string\">'template'<\/span>     =&gt; <span class=\"hljs-keyword\">array<\/span>(\n<\/span><\/span><span class='shcb-loc'><span>            <span class=\"hljs-keyword\">array<\/span>( <span class=\"hljs-string\">'core\/pattern'<\/span>, <span class=\"hljs-keyword\">array<\/span>(\n<\/span><\/span><span class='shcb-loc'><span>                <span class=\"hljs-string\">'slug'<\/span> =&gt; <span class=\"hljs-string\">'example-theme\/book-block-template'<\/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\t<span class=\"hljs-string\">'hierarchical'<\/span>  =&gt; <span class=\"hljs-keyword\">true<\/span>,\n<\/span><\/span><span class='shcb-loc'><span>\t\t<span class=\"hljs-string\">'supports'<\/span>      =&gt; <span class=\"hljs-keyword\">array<\/span>( <span class=\"hljs-string\">'title'<\/span>, <span class=\"hljs-string\">'editor'<\/span>, <span class=\"hljs-string\">'page-attributes'<\/span> ),\n<\/span><\/span><span class='shcb-loc'><span>    );\n<\/span><\/span><span class='shcb-loc'><span>    register_post_type( <span class=\"hljs-string\">'book'<\/span>, $args );\n<\/span><\/span><span class='shcb-loc'><span>}\n<\/span><\/span><span class='shcb-loc'><span>add_action( <span class=\"hljs-string\">'init'<\/span>, <span class=\"hljs-string\">'example_theme_register_book_post_type'<\/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>When a user goes to create a new book, they will automatically be presented with the following template. Note that all blocks are locked, which ensures a standardized presentation for each book.<\/p>\n\n\n\n<figure class=\"wp-block-image alignwide size-full is-style-border\"><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"1015\" src=\"https:\/\/wpengine.com\/builders\/wp-content\/uploads\/book-block-template-empty.jpg\" alt=\"Block template when a user adds a new book.\" class=\"wp-image-4482\" srcset=\"https:\/\/wpengine.com\/builders\/wp-content\/uploads\/book-block-template-empty.jpg 1920w, https:\/\/wpengine.com\/builders\/wp-content\/uploads\/book-block-template-empty-300x159.jpg 300w, https:\/\/wpengine.com\/builders\/wp-content\/uploads\/book-block-template-empty-1024x541.jpg 1024w, https:\/\/wpengine.com\/builders\/wp-content\/uploads\/book-block-template-empty-768x406.jpg 768w, https:\/\/wpengine.com\/builders\/wp-content\/uploads\/book-block-template-empty-1536x812.jpg 1536w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><figcaption class=\"wp-element-caption\">Block template when a user adds a new book.<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p>While block templates have a fairly narrow application in WordPress development, they are essential when you want to create a curated editing experience for users or when working with specialized custom post types. Hopefully, this article inspired you to start exploring templating and perhaps begin using them on your next project.<\/p>\n\n\n\n<p>As always, external links referenced in this article as well as other related resources are listed below. Stay tuned for more articles on block theming, custom block development, and building with modern WordPress techniques. Until next time!<\/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\">\n<li><a href=\"https:\/\/developer.wordpress.org\/block-editor\/reference-guides\/block-api\/block-templates\/\" target=\"_blank\" rel=\"noreferrer noopener\">Block Editor Handbook article on block templates<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/developer.wordpress.org\/block-editor\/reference-guides\/block-api\/block-patterns\/\" target=\"_blank\" rel=\"noreferrer noopener\">Block Editor Handbook article on block patterns<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/wordpress.tv\/2022\/06\/13\/nick-diego-builder-basics-everything-you-need-to-know-about-patterns\/\" target=\"_blank\" rel=\"noreferrer noopener\">WordPress TV video on block patterns<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/developer.wordpress.org\/themes\/basics\/template-files\/\" target=\"_blank\" rel=\"noreferrer noopener\">Theme Handbook article on template files<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/register_post_type\/\" target=\"_blank\" rel=\"noreferrer noopener\">WordPress Code Reference on post type registration<\/a> <\/li>\n<\/ul>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Create curated editing experiences in WordPress with block templates.<\/p>\n","protected":false},"author":5,"featured_media":4487,"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-4428","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.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>An Introduction to Block Templates in WordPress<\/title>\n<meta name=\"description\" content=\"Learn how to create curated editing experiences in WordPress using the power of block templates.\" \/>\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-templates\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"An Introduction to Block Templates in WordPress\" \/>\n<meta property=\"og:description\" content=\"Learn how to create curated editing experiences in WordPress using the power of block templates.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/wpengine.com\/builders\/block-templates\/\" \/>\n<meta property=\"og:site_name\" content=\"Builders\" \/>\n<meta property=\"article:published_time\" content=\"2022-07-13T14:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-09-13T20:06:15+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/wpengine.com\/builders\/wp-content\/uploads\/block-templates-opengraph.jpg\" \/>\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-templates-opengraph.jpg\" \/>\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=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/block-templates\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/block-templates\\\/\"},\"author\":{\"name\":\"Nick Diego\",\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/#\\\/schema\\\/person\\\/ec4573512f14a40d8ec517f312d1879b\"},\"headline\":\"An Introduction to Block Templates\",\"datePublished\":\"2022-07-13T14:00:00+00:00\",\"dateModified\":\"2023-09-13T20:06:15+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/block-templates\\\/\"},\"wordCount\":1559,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/block-templates\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/wp-content\\\/uploads\\\/block-templates-featured-image.jpg\",\"articleSection\":[\"WordPress\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/wpengine.com\\\/builders\\\/block-templates\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/block-templates\\\/\",\"url\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/block-templates\\\/\",\"name\":\"An Introduction to Block Templates in WordPress\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/block-templates\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/block-templates\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/wp-content\\\/uploads\\\/block-templates-featured-image.jpg\",\"datePublished\":\"2022-07-13T14:00:00+00:00\",\"dateModified\":\"2023-09-13T20:06:15+00:00\",\"description\":\"Learn how to create curated editing experiences in WordPress using the power of block templates.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/block-templates\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/wpengine.com\\\/builders\\\/block-templates\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/block-templates\\\/#primaryimage\",\"url\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/wp-content\\\/uploads\\\/block-templates-featured-image.jpg\",\"contentUrl\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/wp-content\\\/uploads\\\/block-templates-featured-image.jpg\",\"width\":1920,\"height\":1080},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/block-templates\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"An Introduction to Block Templates\"}]},{\"@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":"An Introduction to Block Templates in WordPress","description":"Learn how to create curated editing experiences in WordPress using the power of block templates.","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-templates\/","og_locale":"en_US","og_type":"article","og_title":"An Introduction to Block Templates in WordPress","og_description":"Learn how to create curated editing experiences in WordPress using the power of block templates.","og_url":"https:\/\/wpengine.com\/builders\/block-templates\/","og_site_name":"Builders","article_published_time":"2022-07-13T14:00:00+00:00","article_modified_time":"2023-09-13T20:06:15+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/wpengine.com\/builders\/wp-content\/uploads\/block-templates-opengraph.jpg","type":"image\/jpeg"}],"author":"Nick Diego","twitter_card":"summary_large_image","twitter_image":"https:\/\/wpengine.com\/builders\/wp-content\/uploads\/block-templates-opengraph.jpg","twitter_creator":"@nickmdiego","twitter_site":"@wpebuilders","twitter_misc":{"Written by":"Nick Diego","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/wpengine.com\/builders\/block-templates\/#article","isPartOf":{"@id":"https:\/\/wpengine.com\/builders\/block-templates\/"},"author":{"name":"Nick Diego","@id":"https:\/\/wpengine.com\/builders\/#\/schema\/person\/ec4573512f14a40d8ec517f312d1879b"},"headline":"An Introduction to Block Templates","datePublished":"2022-07-13T14:00:00+00:00","dateModified":"2023-09-13T20:06:15+00:00","mainEntityOfPage":{"@id":"https:\/\/wpengine.com\/builders\/block-templates\/"},"wordCount":1559,"commentCount":0,"publisher":{"@id":"https:\/\/wpengine.com\/builders\/#organization"},"image":{"@id":"https:\/\/wpengine.com\/builders\/block-templates\/#primaryimage"},"thumbnailUrl":"https:\/\/wpengine.com\/builders\/wp-content\/uploads\/block-templates-featured-image.jpg","articleSection":["WordPress"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/wpengine.com\/builders\/block-templates\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/wpengine.com\/builders\/block-templates\/","url":"https:\/\/wpengine.com\/builders\/block-templates\/","name":"An Introduction to Block Templates in WordPress","isPartOf":{"@id":"https:\/\/wpengine.com\/builders\/#website"},"primaryImageOfPage":{"@id":"https:\/\/wpengine.com\/builders\/block-templates\/#primaryimage"},"image":{"@id":"https:\/\/wpengine.com\/builders\/block-templates\/#primaryimage"},"thumbnailUrl":"https:\/\/wpengine.com\/builders\/wp-content\/uploads\/block-templates-featured-image.jpg","datePublished":"2022-07-13T14:00:00+00:00","dateModified":"2023-09-13T20:06:15+00:00","description":"Learn how to create curated editing experiences in WordPress using the power of block templates.","breadcrumb":{"@id":"https:\/\/wpengine.com\/builders\/block-templates\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/wpengine.com\/builders\/block-templates\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/wpengine.com\/builders\/block-templates\/#primaryimage","url":"https:\/\/wpengine.com\/builders\/wp-content\/uploads\/block-templates-featured-image.jpg","contentUrl":"https:\/\/wpengine.com\/builders\/wp-content\/uploads\/block-templates-featured-image.jpg","width":1920,"height":1080},{"@type":"BreadcrumbList","@id":"https:\/\/wpengine.com\/builders\/block-templates\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/wpengine.com\/builders\/"},{"@type":"ListItem","position":2,"name":"An Introduction to Block Templates"}]},{"@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\/4428","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=4428"}],"version-history":[{"count":0,"href":"https:\/\/wpengine.com\/builders\/wp-json\/wp\/v2\/posts\/4428\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wpengine.com\/builders\/wp-json\/wp\/v2\/media\/4487"}],"wp:attachment":[{"href":"https:\/\/wpengine.com\/builders\/wp-json\/wp\/v2\/media?parent=4428"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wpengine.com\/builders\/wp-json\/wp\/v2\/categories?post=4428"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wpengine.com\/builders\/wp-json\/wp\/v2\/tags?post=4428"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}