WordPress 模板部件(Template Parts)完全指南
WordPress 模板部件是构建现代块主题的核心组件。简单来说,它们是网站中可重复使用的页面片段——比如页头、页脚或侧边栏。你可以在多个模板中引用同一个部件,这避免了代码重复,也让维护变得更加轻松。比如,当你需要修改整个网站的页脚信息时,只需更新一个模板部件文件,所有使用该部件的页面都会同步生效。
模板部件本质上是一个独立的 HTML 块标记文件,存储在主题的 /parts 目录下。它们不会像模板那样被系统自动加载,而是通过 Template Part 块在父模板中明确引用。更重要的是,你可以通过 WordPress 的可视化编辑器对部件进行修改,并实时预览效果。
从开发者角度看,模板部件不仅提升了代码的组织效率,还为用户提供了灵活的设计自由度。无论你是正在构建自己的一个块主题,还是希望更深入地理解 WordPress 主题架构,掌握模板部件都是必不可少的一环。本文将带你从基础概念到实战技巧,了解这一重要特性。
一、模板部件的工作原理
在 WordPress 主题系统中,模板(Templates)负责搭建页面的大框架,而模板部件(Template Parts)则用来填充框架中的各个功能区。
当用户访问网站时,WordPress 会根据浏览的页面类型选择合适的模板进行加载。然后,模板解析引擎会逐行处理模板文件中的块标记。遇到 Template Part 块时,WordPress 就会到主题的 /parts 文件夹中寻找对应的部件文件进行加载和解析。
Template Part 块在代码中的表现是这样的:
html
<!-- wp:template-part {"slug":"header"} /-->
这个简单的标记告诉 WordPress 去加载 /parts/header.html 文件。
一个典型的模板文件可能会这样引用多个部件:
html
<!-- wp:template-part {"slug":"header","tagName":"header"} /-->
<!-- wp:group -->
<div class="wp-block-group">
<!-- 这里存放页面主要内容 -->
</div>
<!-- /wp:group -->
<!-- wp:template-part {"slug":"footer","tagName":"footer"} /-->
注意上面代码中的 tagName 参数,它指定了部件外层包裹容器的 HTML 标签,比如 header 或 footer。这有助于保持语义化 HTML 结构,对 SEO 和可访问性都有好处。
解析流程是这样的:
- 加载
/parts/header.html并解析其中的所有块 - 解析模板中其他独立的块
- 加载
/parts/footer.html并解析其中的所有块 - 将终渲染的 HTML 发送给浏览器
二、模板部件的内容构成
与经典主题中的 PHP 模板片段不同,块主题中的模板部件只包含纯粹的块标记(Block Markup)。这意味着每个部件都由嵌套的 HTML 结构和对应的注释标记组成。
下面是一个简单的页脚部件示例,存放于 /parts/footer.html:
html
<!-- wp:group {"align":"wide"} -->
<div class="wp-block-group alignwide">
<!-- wp:site-title {"level":3} /-->
<!-- wp:paragraph -->
<p>使用 WordPress 驱动</p>
<!-- /wp:paragraph -->
<!-- wp:social-links -->
<ul class="wp-block-social-links">
<li>社交媒体链接</li>
</ul>
<!-- /wp:social-links -->
</div>
<!-- /wp:group -->
这个页脚部件包含了站点标题块、段落块和社交链接块。部件可以很简单,只放一两行文字;也可以非常复杂,包含多个区块嵌套。
对于块标记语法的深入理解,可以参考 WordPress 官方文档中的块编辑器核心概念。
三、如何组织模板部件文件
在块主题中,所有模板部件都必须放在主题根目录下的 /parts 文件夹内。典型的目录结构长这样:
text
parts/ ├── comments.html ├── footer.html ├── header.html └── sidebar.html
WordPress 不支持在 /parts 文件夹内再建子文件夹来组织部件。也就是说,所有部件文件必须平铺在 /parts 目录下,无法像 parts/headers/ 这样的嵌套方式。
如果你使用的是旧版 WordPress,系统也会识别 /block-template-parts 文件夹,但这是为了向下兼容而保留的路径。新主题建议统一使用 /parts 文件夹。
四、创建和构建模板部件
模板部件可以通过两种方式创建:
方法一:手动编写代码
直接在你的代码编辑器中创建 HTML 文件,编写块标记。这种方式适合对代码结构有清晰规划的开发者。
方法二:通过可视化编辑器生成
- 进入 WordPress 后台,打开「外观 > 编辑器」
- 在「模板部件」区域点击新建按钮
- 在可视化编辑器中拖拽添加所需块,定制样式
- 编辑完成后,复制编辑器中的块标记到对应的
/parts/xxx.html文件中
推荐先通过编辑器直观地搭建部件,再把代码迁移到主题文件中,后将主题打包分发或部署到生产环境。
五、注册模板部件
为了让模板部件在 WordPress 后台的编辑界面中正常显示并拥有友好的名称,你需要在 theme.json 文件中进行注册。
注册示例(在 theme.json 中):
json
{
"version": 2,
"templateParts": [
{
"area": "header",
"name": "header",
"title": "页头(默认)"
},
{
"area": "footer",
"name": "footer",
"title": "页脚(默认)"
},
{
"area": "uncategorized",
"name": "sidebar",
"title": "侧边栏"
}
]
}
area:指定部件所属的区域(下面会详细说明)name:对应/parts/目录中的文件名,不含.html后缀title:在后台界面中显示的名称,支持翻译
注册后,这些部件就会出现在「模板部件」库中,用户可以直接选用和编辑。
六、在后台编辑模板部件
进入「外观 > 编辑器」,在左侧边栏点击「模板部件」,就可以看到所有已注册的部件列表。它们按区域分类排列:
- 页头(Header)
- 页脚(Footer)
- 通用(General)
点击任何一个部件即可进入可视化编辑器,像编辑页面一样拖拽添加或调整块。所有修改都会实时预览。
保存位置说明:
如果你在后台编辑部件并保存,这些更改会存入数据库,覆盖主题文件中的原始版本。这意味着在网页上看到的是数据库版本,而不是 /parts/ 文件夹中的文件版本。
如果你打算把这个主题分享给其他人或用于其他站点,记得把编辑好的块标记代码复制到对应的 /parts/xxx.html 文件中。
七、创建新的模板部件
在「模板部件」面板中,点击「新增」按钮,会弹出一个对话框:
- 输入部件名称(比如「文章循环」)
- 选择所属区域(比如「通用」或自定义区域)
- 点击创建
系统会进入一个全新的编辑界面,你可以在其中自由添加各种块来构建这个新部件。
注意: 通过后台新建的部件默认只保存在数据库中。如需在主题中使用,必须将生成的块标记复制到 /parts/ 目录下的相应文件中,并确保在 theme.json 中完成注册。
八、模板部件区域(Template Part Areas)
模板部件区域是用于对部件进行分类和组织的机制。在后台界面中,部件会按区域分组展示,方便用户查找和管理。
WordPress 内置了三个默认区域:
| 区域标识 | 显示名称 | 说明 |
|---|---|---|
uncategorized | 通用 | 未分类的部件 |
header | 页头 | 通常包含网站标志、导航菜单等 |
footer | 页脚 | 通常包含版权信息、友情链接等 |
注意: 如果你开发的主题有特定的设计需求,可能需要创建自定义区域来更好地组织部件。比如一个「循环」区域,专门存放各种文章列表样式的部件。
九、注册自定义部件区域
你可以通过 default_wp_template_part_areas 过滤器来注册自定义区域。添加以下代码到主题的 functions.php 文件中:
php
add_filter( 'default_wp_template_part_areas', 'mytheme_register_template_part_areas' );
function mytheme_register_template_part_areas( $areas ) {
$areas[] = array(
'area' => 'loop',
'area_tag' => 'section',
'label' => '循环区域',
'description' => '存放各种文章循环样式的部件',
'icon' => 'layout'
);
return $areas;
}
每个区域定义包含以下字段:
area:区域的标识符(机器名)area_tag:该区域部件默认使用的 HTML 包裹标签,如section、div、aside等label:后台显示的名称,支持国际化翻译description:区域功能说明icon:图标标识,目前只有header、footer和sidebar有专属图标
注册完区域后,就可以在 theme.json 中将特定的部件分配到该区域了:
json
{
"version": 2,
"templateParts": [
{
"area": "loop",
"name": "loop-default",
"title": "循环 - 默认样式"
},
{
"area": "loop",
"name": "loop-grid",
"title": "循环 - 网格样式"
}
]
}
这样在后台的模板部件面板中,就会看到「循环区域」分组,下面列出了你注册的所有循环部件。
总结
- 模板部件是 WordPress 块主题中的可复用内容片段,存放于
/parts文件夹中 - 通过
Template Part块在父模板中引用部件,支持设置slug和tagName属性 - 部件文件只包含块标记,不包含 PHP 代码
- 所有部件必须平放在
/parts目录下,不支持子目录嵌套 - 建议在
theme.json中注册所有部件,以获得更好的后台管理体验 - 通过后台编辑器修改的部件会存入数据库,主题文件中的原始版本不会被自动覆盖
- 利用自定义区域可以更有效地组织和分类部件,提升用户体验
- 部件内容的迁移流程:可视化编辑 → 复制标记 → 粘贴到
/parts/xxx.html→ 分发主题
掌握模板部件的使用,是构建现代 WordPress 块主题的基础技能之一。它不仅让你的代码更加整洁有序,也为终用户提供了更灵活、更直观的网站定制体验。