WordPress 主题模板:从入门到精通
理解 WordPress 模板系统是主题开发的核心。本文将用通俗易懂的方式,带你搞懂模板的工作原理、文件结构、创建方法,以及如何通过模板定制网站的每一个页面。无论你是想开发自己的主题,还是想更好地控制网站外观,这篇指南都能帮你快速上手。
模板到底是什么?
简单说,模板就是决定网页“哪里放什么”的蓝图。它告诉 WordPress:头部放什么、主要内容在哪里、底部展示哪些信息。
在经典主题中,模板由 PHP 代码和 HTML 混写而成。但在块主题(Block Theme)中,模板全部由块(Block)的 HTML 标记组成。这也是为什么块主题的模板文件后缀是 .html,而不是 .php。
WordPress 根据访问的 URL 判断用户想看什么类型的页面,然后按优先级顺序寻找匹配的模板:
- 数据库中用户保存的模板(优先级高)
- 子主题的
/templates文件夹 - 当前主题的
/templates文件夹
找到模板后,WordPress 解析其中的块标记,生成终的 HTML 输出给浏览器。
模板文件里有什么?
一个典型的模板文件包含三类东西:
- 块标记:例如
<!-- wp:group -->...<!-- /wp:group --> - 模板部件引用:例如
<!-- wp:template-part {"slug":"header"} /--> - 块模式引用:例如
<!-- wp:pattern {"slug":"theme-name/hidden-404"} /-->
看一个真实的例子(来自 Twenty Twenty-Three 主题的 404.html):
html
<!-- wp:template-part {"slug":"header","tagName":"header"} /-->
<!-- wp:group {"tagName":"main","layout":{"type":"constrained"}} -->
<main class="wp-block-group">
<!-- wp:pattern {"slug":"twentytwentythree/hidden-404"} /-->
</main>
<!-- /wp:group -->
<!-- wp:template-part {"slug":"footer","tagName":"footer"} /-->
这个模板做了三件事:
- 引入头部模板部件
- 在主体区域嵌入一个名为
hidden-404的块模式 - 引入尾部模板部件
重点:你的模板文件必须全部由合法的块标记组成,否则 WordPress 无法正确解析。
模板文件放在哪?
块主题的模板必须放在主题根目录下的 /templates 文件夹中。结构如下:
text
templates/ ├── 404.html (404错误页) ├── archive.html (归档页,如分类、标签) ├── author.html (作者页) ├── home.html (首页) ├── index.html (通用回退模板,**必须存在**) ├── page.html (单页面) └── singular.html (单篇文章/页面/自定义文章类型的回退模板)
index.html 是关键文件——它的存在告诉 WordPress “这是一个块主题”。没有它,WordPress 会认为你的主题是经典主题。
如何创建和编辑模板?
在后台编辑
- 进入 WordPress 后台,点击 外观 → 编辑器
- 在左侧边栏点击 模板,可以看到当前所有模板列表
- 点击任意模板即可在可视化编辑器中修改
注意:在编辑器里保存的模板会被存到数据库中,会覆盖主题文件夹里的同名模板。如果你要分发主题给别人,别忘了把修改后的块标记复制回主题的 /templates 文件夹里。
新建模板
点击模板列表上方的“+添加新模板”按钮,会弹出一个对话框。你可以选择:
- 标准模板:按模板层级命名(如
archive.html) - 自定义模板:任意名称,可分配给特定页面
新建的模板同样默认保存在数据库。要分发,需要在 /templates 下创建对应的 .html 文件并复制内容。
自定义模板(Custom Templates)
自定义模板就是你可以手动分配给特定文章、页面或自定义文章类型的模板。在文章编辑器的右侧边栏,找到“模板”选项,就能选择你创建的自定义模板。
两种使用场景:
- 简单场景:比如一个“联系我们”页面,用不同的布局展示
- 复杂场景:比如一个新闻杂志风格的首页,包含多个文章查询区块
在主题中分发自定义模板需要两步:
- 在
/templates文件夹中创建模板文件(文件名任意,只要不与标准模板名冲突) - 在
theme.json中注册这个模板
注册示例(在 theme.json 的 "templates" 字段中):
json
{
"templates": [
{
"name": "full-width",
"title": "全宽页面",
"postTypes": ["page"]
}
]
}
务必注意:自定义模板中如果要显示文章或页面内容,必须包含文章内容块(Post Content block),否则页面正文不会显示。