在构建主题时,模式不仅仅是用户可以添加到内容中的可重用区块部分。这是一个很好的功能,但模式的真正力量在于直接在主题的前端输出中使用它们。
在本文中,您将学习为什么以及如何将模式包含在主题的模板和模板部分中。
为什么在模板中使用模式?
在模板中使用模式有两个主要原因:
- PHP 访问权限:区块模板和模板部分是 HTML 文件,您需要访问各种 PHP 函数以实现动态功能。您可以在 使用 PHP 创建模式 文档中了解更多相关信息。
- DRY(不要重复自己)原则:在构建任何类型的软件(包括主题)时,您应该尽可能重用代码,这意味着为您减少工作量并减少潜在的错误。因为模式是可重用的区块组,所以在模板和部件中重写代码不如使用模式有意义。
本文将主要关注最后一点。您将学习如何在主题的区块模板和模板部分中重用您的模式。
最佳用例之一是创建跨多个模板的常见元素的模式。例如,如果您的主页、归档和搜索模板都包含相同的查询循环布局,请为该设计创建一个模式并将其包含在每个模板中。
模式区块
正如 模式简介 中所描述的那样,区块模式只是您注册为模式的单个或一组区块。然而,WordPress 中还有一个名为“模式”的区块。您不会在 UI(如区块插入器)中的任何地方找到模式区块。它主要用于 WordPress 主题。
以下是模式区块标记的外观:
<!-- wp:pattern {"slug":"namespace/pattern-slug"} /-->正如您所看到的,它看起来就像任何其他区块标记。最大的区别是,您必须设置 slug 参数以包含特定模式。值必须包含模式命名空间和 slug。
每当您想在模板或模板部分中包含模式时,您只需要调用模式区块。
您还可以在模板中包含由 WordPress 或插件注册的模式,而不仅仅是来自您主题的模式。您只需在调用模式区块时引用正确的 slug 值。
向模板添加模式
在本节中,您将通过一个实际示例来了解如何在模板中包含模式。
假设您有一个“英雄”模式,您已将其注册到您的主题中,因为您希望用户能够在需要时在任何地方插入它。但您也希望默认情况下将其包含在主页模板中。
首先,使用 themeslug/hero 注册自定义模式,如 注册模式 文档中所描述的那样。创建一个名为 hero.php 的新文件并将其放入主题的 /patterns 文件夹中,代码如下:
<?php
/**
* Title: Hero
* Slug: themeslug/hero
* Categories: featured
*/
?>
<!-- wp:cover {"overlayColor":"contrast","isUserOverlayColor":true,"align":"full"} -->
<div class="wp-block-cover alignfull">
<span aria-hidden="true" class="wp-block-cover__background has-contrast-background-color has-background-dim-100 has-background-dim"></span>
<div class="wp-block-cover__inner-container">
<!-- wp:heading {"textAlign":"center"} -->
<h2 class="wp-block-heading has-text-align-center"><?php esc_html_e( 'Welcome to My Site', 'themeslug' ); ?></h2>
<!-- /wp:heading -->
<!-- wp:paragraph {"align":"center"} -->
<p class="has-text-align-center"><?php esc_html_e( 'This is my little home away from home.', 'themeslug' ); ?></p>
<!-- /wp:paragraph -->
<!-- wp:buttons {"layout":{"type":"flex","justifyContent":"center"}} -->
<div class="wp-block-buttons">
<!-- wp:button {"className":"wp-block-button is-style-outline"} -->
<div class="wp-block-button is-style-outline"><a class="wp-block-button__link wp-element-button"><?php esc_html_e( 'Button A', 'themeslug' ); ?></a></div>
<!-- /wp:button -->
</div>
<!-- /wp:buttons -->
</div>
</div>
<!-- /wp:cover -->这将使用户可以通过 UI 访问该模式,您的主题模板也可以包含它。
要在模板中包含此特定模式,您需要像这样调用它:
<!-- wp:pattern {"slug":"themeslug/hero"} /-->现在尝试将其添加到主题的模板之一中,例如 /templates/home.html 或 /templates/index.html 的标题下方。带有模式代码的模板应类似于以下内容:
<!-- wp:template-part {"slug":"header"} /-->
<!-- wp:pattern {"slug":"themeslug/hero"} /-->
<!-- 其他区块。/-->
<!-- wp:template-part {"slug":"footer"} /-->现在通过前往 外观 > 编辑器 > 模板 并在 Site Editor 中测试添加模式,然后选择您添加了它的模板:

当使用该模板时,模式也应该出现在网站的前端。
从这一点开始,您可以根据需要以各种方式使用此功能。无论您是将模式包含在模板还是模板部分中,过程都是相同的。