在构建主题时,模式不仅仅是用户可以添加到内容中的可重用区块部分。这是一个很好的功能,但模式的真正力量在于直接在主题的前端输出中使用它们。

在本文中,您将学习为什么以及如何将模式包含在主题的模板和模板部分中。

为什么在模板中使用模式?

在模板中使用模式有两个主要原因:

  • 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 中测试添加模式,然后选择您添加了它的模板:

打开 WordPress 站点编辑器中的主页/博客模板。它显示了一个头部模板部分,并且在模板顶部的覆盖块中有一个“欢迎”消息。

当使用该模板时,模式也应该出现在网站的前端。

从这一点开始,您可以根据需要以各种方式使用此功能。无论您是将模式包含在模板还是模板部分中,过程都是相同的。