1-6 wordpress 模板层次结构
如前所述,模板文件是模块化的、可重复使用的文件,用于在您的 WordPress 网站上生成网页。 某些模板文件(例如页眉和页脚模板)用于您网站的所有页面,而其他模板文件仅在特定条件下使用。
本文解释了 WordPress 如何确定在各个页面上使用哪些模板文件。 如果您想自定义现有的 WordPress 主题,它将帮助您决定需要编辑哪个模板文件。
您还可以使用条件标签来控制在特定页面上加载哪些模板。
一、模板文件层次结构
1、概述
WordPress 使用查询字符串来决定应该使用哪个模板或模板集来显示页面。 查询字符串是包含在指向您网站每个部分的链接中的信息。
简而言之,WordPress 向下搜索模板层次结构,直到找到匹配的模板文件。 要确定要使用的模板文件,WordPress:
- 将每个查询字符串与查询类型匹配,以决定正在请求哪个页面(例如,搜索页面、类别页面等);
- 按照模板层次结构确定的顺序选择模板;
- 在当前主题的目录中查找具有特定名称的模板文件,并使用层次结构指定的第一个匹配的模板文件。
除了基本的 index.php 模板文件外,您可以选择是否要实现特定的模板文件。
在这些示例中,使用了 PHP 文件扩展名。 在块主题中,改为使用 HTML 文件,但模板层次结构是相同的。
如果 WordPress 找不到具有匹配名称的模板文件,它将跳到层次结构中的下一个文件。 如果 WordPress 找不到任何匹配的模板文件,将使用主题的 index.php 文件。
当您使用子主题时,您添加到子主题的任何文件都将覆盖父主题中的相同文件。 例如,两个主题包含相同的模板 category.php,则使用子主题的模板。
如果子主题包含特定模板,例如 category-unicorns.php,而父主题包含优先级较低的模板,例如 category.php,则使用子主题的 category-unicorns.php。
相反,如果子主题仅包含通用模板,例如 category.php,而父主题包含特定模板,例如 category-unicorns.php,则使用父主题的模板 category-unicorns.php。
2、例子
如果您的博客位于 http://example.com/blog/ 并且访问者单击指向类别页面的链接,例如 http://example.com/blog/category/your-cat/,则 WordPress 会查找模板 当前主题目录中与类别 ID 匹配的文件以生成正确的页面。 更具体地说,WordPress 遵循以下过程:
- 在当前主题的目录中查找与类别的 slug 匹配的模板文件。 如果类别 slug 是“独角兽”,那么 WordPress 会查找名为 category-unicorns.php 的模板文件。
- 如果 category-unicorns.php 缺失且类别 ID 为 4,WordPress 会查找名为 category-4.php 的模板文件。
- 如果 category-4.php 缺失,WordPress 将查找通用类别模板文件 category.php。
- 如果 category.php 不存在,WordPress 将查找通用归档模板 archive.php。
- 如果archive.php 也丢失,WordPress 将回退到主题模板文件index.php。
3、视觉概览
下图显示了调用哪些模板文件来生成基于 WordPress 模板层次结构的 WordPress 页面。

二、详细的模板层次结构
虽然模板层次结构更容易理解为图表,但以下部分描述了 WordPress 针对多种查询类型调用模板文件的顺序。
1、主页显示
默认情况下,WordPress 将您网站的主页设置为显示您最新的博客文章。 此页面称为博客文章索引。 您还可以将博客文章设置为显示在单独的静态页面上。 模板文件 home.php 用于呈现博客文章索引,无论是用作首页还是单独的静态页面。 如果 home.php 不存在,WordPress 将使用 index.php。
- home.php
- index.php
2、首页展示
front-page.php 模板文件用于呈现您网站的首页,无论首页显示博客文章索引(如上所述)还是静态页面。 首页模板优先于博客文章索引 (home.php) 模板。 如果 front-page.php 文件不存在,WordPress 将根据设置 → 阅读中的设置使用 home.php 或 page.php 文件。 如果这些文件都不存在,它将使用 index.php 文件。
- front-page.php - 用于“您的最新帖子”或“静态页面”,如设置→阅读的首页显示部分中设置的。
- home.php – 如果 WordPress 找不到 front-page.php 并且在首页显示部分设置了“您的最新帖子”,它将查找 home.php。 此外,当在首页显示部分设置帖子页面时,WordPress 将查找此文件。
- page.php – 在首页显示部分设置“首页”时。
- index.php – 当首页显示部分设置了“您的最新帖子”但 home.php 不存在或设置了首页但 page.php 不存在时。
如您所见,WordPress 采用的路径有很多规则。 使用上面的图表是确定 WordPress 将显示什么的最佳方法。
3、隐私政策页面展示
privacy-policy.php 模板文件用于呈现您网站的隐私政策页面。 隐私政策页面模板优先于静态页面 (page.php) 模板。 如果 privacy-policy.php 文件不存在,WordPress 将根据可用模板使用 page.php 或 single.php 文件。 如果这些文件都不存在,它将使用 index.php 文件。
- privacy-policy.php – 用于设置→隐私的更改您的隐私政策页面部分中设置的隐私政策页面。
- 自定义模板文件 – 分配给页面的页面模板。请参阅 get_page_templates()。
- page-{slug}.php - 如果页面 slug 是隐私,WordPress 将使用 page-privacy.php。
- page-{id}.php – 如果页面 ID 为 6,WordPress 将使用 page-6.php。
- page.php
- singular.php
- index.php
4、单个帖子
单个帖子模板文件用于呈现单个帖子。 WordPress 使用以下路径:
- single-{post-type}-{slug}.php –(自 4.4 起)首先,WordPress 为特定帖子寻找模板。 例如,如果帖子类型是产品并且帖子 slug 是 dmc-12,则 WordPress 将查找 single-product-dmc-12.php。
- single-{post-type}.php – 如果文章类型是产品,WordPress 会查找 single-product.php。
- single.php – WordPress 然后回退到 single.php。
- singular.php– WordPress 然后回退到 singular.php。
- index.php – 最后,如上所述,WordPress 最终会退回到 index.php。
5、单页
用于呈现静态页面(页面后期类型)的模板文件。 请注意,与其他帖子类型不同,页面对 WordPress 来说是特殊的,并且使用以下路径:
- 自定义模板文件 – 分配给页面的页面模板。 请参阅 get_page_templates()。
- page-{slug}.php – 如果页面 slug 是最近新闻,WordPress 将使用 page-recent-news.php。
- page-{id}.php – 如果页面 ID 为 6,WordPress 将使用 page-6.php。
- page.php
- singular.php
- index.php
6、类别
渲染分类归档索引页面在 WordPress 中使用以下路径:
- category-{slug}.php - 如果类别的 slug 是新闻,WordPress 将查找 category-news.php。
- category-{id}.php - 如果类别的 ID 为 6,WordPress 将查找 category-6.php。
- category.php
- archive.php
- index.php
7、标签
为了显示标签存档索引页面,WordPress 使用以下路径:
- tag-{slug}.php – 如果标签的 slug 是 sometag,WordPress 将查找 tag-sometag.php。
- tag-{id}.php - 如果标签的 ID 为 6,WordPress 将查找 tag-6.php。
- tag.php
- archive.php
- index.php
8、自定义分类法
自定义分类法使用稍微不同的模板文件路径:
- taxonomy-{taxonomy}-{term}.php – 如果分类法是 sometax,并且分类法的术语是 someterm,WordPress 将查找 taxonomy-sometax-someterm.php。 对于帖子格式,分类是“post_format”,术语是“post-format-{format}”。 即 taxonomy-post_format-post-format-link.php 用于链接发布格式。
- taxonomy-{taxonomy}.php – 如果分类是 sometax,WordPress 会寻找 taxonomy-sometax.php。
- taxonomy-php
- archive.php
- index.php
9、自定义帖子类型
自定义帖子类型使用以下路径呈现适当的存档索引页面。
- archive-{post_type}.php – 如果帖子类型是产品,WordPress 将查找 archive-product.php。
- product.php
- archive.php
- index.php
(关于渲染单个帖子类型模板,请参阅上面的单个帖子显示部分。)
10、作者展示
基于上述示例,呈现作者存档索引页面是相当解释性的:
- author-{nicename}.php - 如果作者的好名字是 matt,WordPress 将查找 author-matt.php。
- author-{id}.php - 如果作者的 ID 为 6,WordPress 将查找 author-6.php。
- author.php
- archive.php
- index.php
11、日期
基于日期的存档索引页面会按照您的预期呈现:
- date.php
- archive.php
- index.php
12、搜索结果
搜索结果遵循与其他模板类型相同的模式:
- search.php
- index.php
13、404(未找到)
同样,按以下顺序调用 404 个模板文件:
- 404.php
- index.php
14、附件
呈现附件页面(附件后类型)使用以下路径:
- {MIME-type}.php – 可以是任何 MIME 类型(例如:image.php、video.php、pdf.php)。 对于 text/plain,使用以下路径(按顺序):
- text-plain.php
- plain.php
- text.php
- attachment.php
- single-attachment-{slug}.php – 例如,如果附件 slug 是假日,WordPress 会查找 single-attachment-holiday.php。
- single-attachment.php
- single.php
- singular.php
- index.php
15、嵌入
嵌入模板文件用于呈现正在嵌入的帖子。 从 4.5 开始,WordPress 使用以下路径:
- embed-{post-type}-{post_format}.php – 首先,WordPress 为特定帖子寻找模板。 例如,如果它的帖子类型是 post 并且它具有音频格式,则 WordPress 将查找 embed-post-audio.php。
- embed-{post-type}.php – 如果文章类型是产品,WordPress 会查找 embed-product.php。
- embed.php – WordPress 然后回退到 embed.php。
- 最后,WordPress 最终会退回到它自己的 wp-includes/theme-compat/embed.php 模板。
二、非 ASCII 字符处理
从 WordPress 4.7 开始,模板名称中包含非 ASCII 字符的任何动态部分实际上都按顺序支持未编码和编码形式。 您可以选择使用哪个。
这是一个名为“Hello World 😀”、ID 为 6 的页面的页面模板层次结构:
- page-hello-world-😀.php
- page-hello-world-%f0%9f%98%80.php
- page-6.php
- page.php
- singular.php
相同的行为适用于 post slug、术语名称和作者昵称。
三、过滤器层次
WordPress 模板系统允许您过滤层次结构。 这意味着您可以在层次结构的特定点插入和更改内容。 过滤器(位于 get_query_template() 函数中)使用此过滤器名称:"{$type}_template" 其中 $type 是模板类型。
以下是模板层次结构中所有可用过滤器的列表:
- embed_template
- 404_template
- search_template
- frontpage_template
- home_template
- privacypolicy_template
- taxonomy_template
- attachment_template
- single_template
- page_template
- singular_template
- category_template
- tag_template
- author_template
- date_template
- archive_template
- index_template
例子
例如,让我们采用默认的作者层次结构:
- author-{nicename}.php
- author-{id}.php
- author.php
要在 author.php 之前添加 author-{role}.php,我们可以使用“author_template”模板类型来操作实际的层次结构。 这允许对 /author/username 的请求,其中 username 具有编辑器的角色,如果存在于当前主题目录中,则使用 author-editor.php 显示。
1 function author_role_template( $templates = '' ) { 2 $author = get_queried_object(); 3 $role = $author->roles[0]; 4 5 if ( ! is_array( $templates ) && ! empty( $templates ) ) { 6 $templates = locate_template( array( "author-$role.php", $templates ), false ); 7 } elseif ( empty( $templates ) ) { 8 $templates = locate_template( "author-$role.php", false ); 9 } else { 10 $new_template = locate_template( array( "author-$role.php" ) ); 11 12 if ( ! empty( $new_template ) ) { 13 array_unshift( $templates, $new_template ); 14 } 15 } 16 return $templates; 17 } 18 19 add_filter( 'author_template', 'author_role_template' );
变更日志:
- 更新于 2022 年 2 月 15 日。 添加了一条通知,说明经典主题和块主题的模板层次结构相同,但示例使用 .php 文件,块主题使用 .html 文件。

浙公网安备 33010602011771号