模板部件是小型区块(即部件),您可以将其包含在顶级模板中。遵循 DRY(不要重复自己)原则,它们通常用作需要在多个模板中重用的部分。与其多次编写代码,您可以将其拆分为单个文件并在需要时包含它。

由于本章专注于theme.json,本文档的目标是解释如何在theme.json文件中注册模板部件。您可以在模板章节中更深入地了解模板和模板部件。

在theme.json中,您可以为模板部件注册额外的元数据,例如标题和分配给该部件的区域。

注册模板部件

从技术上讲,您可以在不通过theme.json注册的情况下使用自定义模板部件。但是注册它们有一些明显的优势:

  • 您可以为部件提供一个在用户界面中更具吸引力的可翻译标题。
  • 您可以将每个部件分配到一个区域,从而在站点编辑器中创建更好的用户体验。
  • 它与插件、样式变体和子主题配合得更好,这些插件可能会以某种方式获取、过滤或使用注册的元数据。

要注册模板部件,您必须向theme.json中的templateParts属性传递对象数组。数组中的每个对象接受三个键/值对:

  • area: 模板部件所属的区域。默认选项是header、footer和uncategorized。您也可以将其分配给任何自定义区域。
  • name: 不带扩展名的模板部件文件名。
  • title: 您模板的可读标题,可以翻译。

WordPress 将在主题的/parts文件夹中查找模板部件。因此,如果您注册名为 `example` 的模板部件,您还必须在主题中包含一个/parts/example.html文件。

您可以在模板章节中了解更多有关模板部件区域的信息。此外,请查看 WordPress 开发者博客上的使用自定义模板部件区域升级站点编辑体验教程,以深入了解创建自定义区域。

注册一个模板部件

任何主题都会注册的两个最常见的模板部件是用于站点页眉和页脚。这也是为什么 WordPress 有默认的header和footer区域的原因。您不需要使用这些部件或区域,但它们几乎是所有网站的标准部分。

对于此练习,让我们同时注册它们。首先,如果它们尚不存在,请在主题的/parts文件夹中添加几个名为header.html和footer.html的空文件。您将在下一步中向其中添加一些块代码。

现在在theme.json中注册这些模板部件:

{
	"version": 2,
	"templateParts": [
		{
			"area": "header",
			"name": "header",
			"title": "Header"
		},
		{
			"area": "footer",
			"name": "footer",
			"title": "Footer"
		}
	]
}

当area和name值都匹配时可能会令人困惑。这并非总是如此,但在处理页眉和页脚时经常是这样。

一些主题作者更喜欢将header和footer模板部件命名为site-header和site-footer以更好地区分它们。如果您觉得这样更有意义,请随意这样做。或者将它们重命名为您想要的任何名称。

您不限于这两个常见的模板部件。您可以为您的主题项目添加尽可能多的部件。

构建一个模板部件

所有模板部件都应放置在主题的/parts文件夹中(WordPress 也识别/template-parts文件夹以向后兼容)。因此,您现在将编辑/parts/header.html和/parts/footer.html文件。

您可以在模板章节中了解更多有关构建自定义模板部件的信息。出于本文档的目的,只需将以下代码片段视为您可以自定义的示例。

在您的/parts/header.html文件中添加此代码:

<!-- wp:group {"style":{"spacing":{"padding":{"top":"2rem","bottom":"2rem","right":"2rem","left":"2rem"}}},"layout":{"type":"default"}} -->
<div class="wp-block-group" style="padding-top:2rem;padding-right:2rem;padding-bottom:2rem;padding-left:2rem">
	<!-- wp:group {"layout":{"type":"flex","justifyContent":"space-between"}} -->
	<div class="wp-block-group">
		<!-- wp:site-title /-->
		<!-- wp:navigation {"icon":"menu","layout":{"type":"flex","setCascadingProperties":true,"justifyContent":"right"}} /-->
	</div>
	<!-- /wp:group -->
</div>
<!-- /wp:group -->

然后将此代码添加到您的/parts/footer.html文件:

<!-- wp:group {"style":{"spacing":{"padding":{"top":"2rem","right":"2rem","bottom":"2rem","left":"2rem"}}}} -->
<div class="wp-block-group" style="padding-top:2rem;padding-right:2rem;padding-bottom:2rem;padding-left:2rem">

	<!-- wp:group {"align":"wide","style":{"spacing":{"blockGap":"0"}},"layout":{"type":"flex","orientation":"vertical","justifyContent":"center"}} -->
	<div class="wp-block-group alignwide">
		<!-- wp:site-title {"level":0,"isLink":false,"className":"is-style-normalize"} /-->

		<!-- wp:paragraph -->
			<p>Powered by WordPress.</p>
		<!-- /wp:paragraph -->
	</div>
	<!-- /wp:group -->

</div>
<!-- /wp:group -->

现在转到 WordPress 管理中的外观 > 编辑器,并查看图案 > 模板部件部分。您应该能看到页眉和页脚区域列出了您的自定义模板部件:

WordPress 站点编辑器中的模板屏幕。已专门选择页眉区域,显示单个页眉模板部件。

包含一个模板部件

创建模板部件文件并在theme.json中注册它们并不意味着您的部件会自动出现在网站上。因为它们只是部分,所以您还必须将它们包含在模板内部。

请记住,如果您不熟悉它们,您可以在模板文档中了解有关创建模板的更多信息。目前,您只需要测试注册过程如何工作。

要在顶级模板中包含模板部件,您必须使用模板部件块。此块的基本标记为:

<!-- wp:template-part {"slug":"your-part-slug"} /-->

因此,打开来自主题/templates文件夹的模板文件之一。您的主题应该至少有一个index.html模板在那里,但您可以使用任何文件进行测试。

现在按此处所示添加对wp:template-part块的调用:

<!-- wp:template-part {"slug":"header","tagName":"header"} /-->

<!-- Other block markup goes here. -->

<!-- wp:template-part {"slug":"footer","tagName":"footer"} /-->

现在,如果您在 WordPress 管理中的外观 > 编辑器 > 模板中打开添加了它们的顶级模板,您应该能看到页眉和页脚模板部件:

正在编辑模板的 WordPress 站点编辑器。已选择页眉模板部件。