WordPress 模板系统完全指南
在 WordPress 的里,模板系统是连接你的内容与访问者浏览器的桥梁。它负责把数据库中存储的文章、页面、设置等动态数据,转换成结构化的 HTML 页面。与传统的纯 HTML 网站不同,WordPress 的模板不只是静态代码——它包含一种特殊的“块标记”语法,让模板既能输出固定内容,也能动态加载数据。这套系统的一大亮点,是你可以通过后台的可视化编辑器直接修改模板,而无需触碰任何代码文件。对于主题开发者来说,理解模板的工作原理、块标记的写法、以及模板与模板部件之间的关系,是构建现代化 WordPress 主题的基础。本文将带你逐步拆解这套系统,从基础概念到实际操作,让你快速掌握要点。
模板是什么
你可以把模板看作一个“网页骨架”。它本身不包含具体的内容,而是定义了内容的展示结构和位置。当用户访问你的网站时,WordPress 会找到对应的模板文件,解析其中的块标记,从数据库拉取文章内容、站点标题、导航菜单等动态数据,填充到模板里,后生成完整的 HTML 页面发送给浏览器。
与传统 PHP 主题不同,现代块主题(Block Theme)的模板文件是纯 .html 格式。没错,就是普通的 HTML 文件,只不过里面多了一些特殊的注释代码——这就是块标记。WordPress 在后台运行时,会识别这些标记,把它们替换成真实的内容。
块标记是什么
块标记是一种特殊的 HTML 注释,用来告诉 WordPress“这里要放一个块”。它的基本格式如下:
html
<!-- wp:site-title /-->
这行代码的意思是:在这里输出站点的标题。WordPress 会把它渲染成类似 <h1>我的网站名称</h1> 这样的 HTML。
当你使用三方插件提供的块时,需要加上命名空间:
html
<!-- wp:plugin-name/block-slug /-->
块标记还可以携带设置参数,使用 JSON 格式:
html
<!-- wp:heading {"level":3,"align":"center"} -->
<h3 class="wp-block-heading has-text-align-center">这是一个居中的三级标题</h3>
<!-- /wp:heading -->
上面的例子中,{"level":3,"align":"center"} 就是块设置,告诉编辑器这个标题是三级标题并且居中对齐。
模板 vs 静态 HTML
很多初学者会问:既然模板也是 .html 文件,那跟普通网页有什么区别?区别在于两点:动态数据和可复用性。
动态数据
写静态页面时,你得像这样手写站点标题:
html
<h1>张三的个人博客</h1>
但如果这个主题要卖给其他人,或者你以后想改站点名称,就得手动修改每个页面。WordPress 的做法是:
html
<!-- wp:site-title /-->
主题不写死任何具体内容,只描述“这里应该放网站标题”这个意图。真正的内容由 WordPress 在运行时动态填充。同一个主题,安装在不同站点上,显示的自然就是不同站点的标题。
可复用性
网页的头部和底部,通常在所有页面里都是一样的。如果用纯 HTML,你需要把头部代码复制到每一个页面文件里——一旦要修改,就得逐个文件去改。
WordPress 通过“模板部件”来解决这个问题。把头部代码单独保存为 header.html,然后在任何需要的地方这样引用它:
html
<!-- wp:template-part {"slug":"header","tagName":"header"} /-->
所有页面共用这一个头部文件,修改一次,全局生效。这就是软件工程里常说的 DRY 原则(Don’t Repeat Yourself,不要重复自己)。
模板部件的概念
模板部件(Template Part)就是那些被拆解出来、可以反复使用的小模块。常见的部件是头部和底部,但也可以是文章循环列表、侧边栏、CTA 区域等任何你希望复用的部分。
在主题的文件结构里,模板放在 /templates 文件夹,模板部件放在 /parts 文件夹。一个典型的结构像这样:
text
parts/ ├── header.html ├── footer.html └── loop.html templates/ ├── index.html ├── archive.html ├── singular.html └── page.html
index.html 是必需的,它作为默认模板,在其他更具体的模板都不适用时使用。
看一个实际的模板文件 archive.html 的例子:
html
<!-- wp:template-part {"slug":"header","tagName":"header"} /-->
<!-- wp:group {"tagName":"main","layout":{"type":"constrained"}} -->
<main class="wp-block-group">
<!-- wp:template-part {"slug":"loop","align":"full"} /-->
</main>
<!-- /wp:group -->
<!-- wp:template-part {"slug":"footer","tagName":"footer"} /-->
这个模板本身只做了三件事:引入头部、引入循环列表、引入底部。真正的结构逻辑和样式,都封装在对应的部件里。这种做法的好处是,如果你想调整博客归档页的内容区,只需要修改 parts/loop.html 一个文件,所有使用了这个部件的模板都会同步更新。
如何生成块标记
手动写块标记不是不行,但记住所有块的名称和参数确实不现实。官方推荐的做法是:用可视化编辑器生成,再复制代码。
具体操作路径:
- 进入 WordPress 后台,点击 外观 → 编辑器 → 模板。
- 选择你要编辑的模板(比如“首页”)。
- 在可视化编辑器里用拖拽、点击的方式搭建好版面。
- 点击工具栏右上角的选项菜单(三个竖点图标),选择“代码编辑器”。
- 编辑器会切换到代码视图,里面显示的就是当前模板的完整块标记代码。
- 全选复制,粘贴到主题的
/templates/对应文件里。
如果你只想复制某个局部区域,也可以直接在编辑器中选中那些块,点击选项菜单里的“复制”,然后粘贴到你的模板文件中。
注意:如果你是在自己的网站上操作,修改后直接保存,改动会存进数据库,优先级高于主题文件。但如果你是在开发一个要分发给别人的主题,就需要把代码复制到主题文件里打包。
模板系统的执行流程
为了帮你更清楚地理解整套机制,这里梳理一下 WordPress 处理模板请求的完整流程:
- 用户访问:浏览器向你的网站发起请求。
- 路由匹配:WordPress 根据 URL 判断用户想看什么内容(是文章、页面、分类归档,还是日期归档)。
- 模板选择:WordPress 按照一套优先级规则,从你的主题里挑选合适的模板文件。比如访问单篇文章会用
singular.html,访问分类页会用archive.html。 - 块标记解析:WordPress 读取模板文件,识别其中的块标记(以
<!-- wp:开头的注释),将其中的动态数据从数据库提取出来。 - HTML 组装:模板中引用的各个部件也会被递归解析,终拼装成完整的 HTML 结构。
- 输出响应:生成的 HTML 连同 CSS、JavaScript 资源一并发送回浏览器。
这套流程中,模板选择环节有一个明确的优先级顺序:WordPress 会从具体的模板开始尝试,找不到再退而求其次。比如访问一篇 ID 为 42 的文章,它会依次尝试 single-post-42.html、single-post.html、singular.html、index.html,直到命中一个存在的文件。
总结
WordPress 的模板系统本质上是将“内容”与“展示”解耦。模板定义结构,块标记指定位置,WordPress 负责填充数据。与传统 PHP 主题相比,块主题用纯 HTML 加块标记的方式,让模板可以通用于任何 WordPress 站点,同时借助可视化编辑器降低了定制门槛。
理解这套系统的三个核心概念,你就能灵活驾驭它:
- 模板:顶层页面骨架,决定页面的整体布局。
- 模板部件:可复用的模块,减少重复代码。
- 块标记:特殊的 HTML 注释,描述“这里放什么”,由 WordPress 动态渲染。
掌握了这些,你就可以开始尝试修改或创建自己的块主题了。先从后台的编辑入手,熟悉块的组合方式,再慢慢过渡到直接编写模板文件——这是大多数主题开发者走过的路,也是的学习路径。