wordpress 模板层次结构

如前所述,模板文件是模块化的、可重用的文件,用于在您的 WordPress 网站上生成网页。某些模板文件(例如页眉和页脚模板)会在您网站的所有页面上使用,而其他模板文件仅在特定条件下使用。

本文解释了WordPress如何确定在各个页面上使用哪些模板文件。如果您想自定义现有的WordPress主题,它将帮助您决定需要编辑哪个模板文件。

提示:还可以使用条件标记来控制在特定页面上加载哪些模板。


模板文件层次结构

概述
WordPress使用查询字符串来决定应该使用哪个模板或一组模板来显示页面。查询字符串是指向网站每个部分的链接中包含的信息。

简而言之,WordPress向下搜索模板层次结构,直到找到匹配的模板文件。要确定要使用的模板文件,WordPress:

将每个查询字符串与查询类型匹配,以确定请求的页面(例如,搜索页面、类别页面等);
按模板层次结构确定的顺序选择模板;
在当前主题的目录中查找具有特定名称的模板文件,并使用层次结构指定的第一个匹配模板文件。
除基本模板文件外,您可以选择是否要实现特定的模板文件。index.php

提示:在这些示例中,使用 PHP 文件扩展名。在块主题中,改用 HTML 文件,但模板层次结构相同。

如果WordPress找不到具有匹配名称的模板文件,它将跳到层次结构中的下一个文件。如果WordPress找不到任何匹配的模板文件,则将使用主题的文件。index.php

使用子主题时,添加到子主题的任何文件都将覆盖父主题中的相同文件。例如,两个主题包含相同的模板,则使用子主题的模板。
如果子主题包含特定模板(如 ),而父主题包含优先级较低的模板(如 ),则使用子主题。
相反,如果子主题仅包含常规模板(如 ),而父主题包含特定模板(如 ),则使用父主题的模板。category.phpcategory-unicorns.phpcategory.phpcategory-unicorns.phpcategory.phpcategory-unicorns.phpcategory-unicorns.php

例子
如果您的博客位于并且访问者单击指向类别页面的链接,例如 ,WordPress 会在当前主题的目录中查找与类别 ID 匹配的模板文件以生成正确的页面。更具体地说,WordPress遵循以下程序:http://example.com/blog/http://example.com/blog/category/your-cat/

在当前主题的目录中查找与类别的 slug 匹配的模板文件。如果类别 slug 是“独角兽”,那么 WordPress 会查找一个名为 .category-unicorns.php
如果缺少,并且类别的ID为4,WordPress将查找名为的模板文件。category-unicorns.phpcategory-4.php
如果缺少,WordPress将查找通用类别模板文件。category-4.phpcategory.php
如果不存在,WordPress将寻找一个通用的存档模板。category.phparchive.php
如果也缺少,WordPress 将回退到主主题模板文件。archive.phpindex.php

视觉概述
下图显示了调用哪些模板文件来生成基于 WordPress 模板层次结构的 WordPress 页面。

模板层次结构详细信息
虽然模板层次结构作为图表更容易理解,但以下部分描述了 WordPress 为多种查询类型调用模板文件的顺序。

主页显示
默认情况下,WordPress 会设置您网站的主页以显示您最新的博客文章。此页面称为博客文章索引。您还可以将博客文章设置为显示在单独的静态页面上。模板文件用于呈现博客文章索引,无论它是用作首页还是在单独的静态页面上。如果不存在,WordPress将使用.home.phphome.phpindex.php

home.php
index.php
注意:如果存在,它将覆盖模板。front-page.phphome.php

 

首页显示
模板文件用于呈现网站的首页,无论首页显示博客文章索引(如上所述)还是静态页面。首页模板优先于博客文章索引 () 模板。如果该文件不存在,WordPress将根据“设置→阅读”中的设置使用或文件。如果这两个文件都不存在,它将使用该文件。front-page.phphome.phpfront-page.phphome.phppage.phpindex.php

front-page.php– 用于“您的最新帖子”或“静态页面”,如首页显示“设置→阅读”部分。
home.php– 如果 WordPress 找不到并且“您的最新帖子”在首页显示部分设置,它将查找 .此外,当帖子页面设置在首页显示部分时,WordPress将查找此文件。front-page.phphome.php
page.php– 在首页显示部分中设置“首页”时。
index.php– 当在首页显示部分设置了“您的最新帖子”但不存在时,或者当首页设置但不存在时。home.phppage.php
如您所见,WordPress采取的路径有很多规则。使用上面的图表是确定WordPress将显示什么的最佳方式。

顶部 ↑

隐私政策页面显示
模板文件用于呈现您网站的“隐私政策”页面。“隐私策略”页面模板优先于静态页面 () 模板。如果该文件不存在,WordPress将根据可用的模板使用或文件。如果这两个文件都不存在,它将使用该文件。privacy-policy.phppage.phpprivacy-policy.phppage.phpsingular.phpindex.php

privacy-policy.php– 用于在“设置”→“隐私”的“更改您的隐私政策”页面部分中设置的“隐私政策”页面。
custom template file– 分配给页面的页面模板。看。get_page_templates()
page-{slug}.php– 如果页面 slug 是 ,WordPress 将寻求使用 。privacypage-privacy.php
page-{id}.php如果页面ID是6,WordPress将寻求使用。page-6.php
page.php
singular.php
index.php

单帖
单个帖子模板文件用于呈现单个帖子。WordPress使用以下路径:

single-{post-type}-{slug}.php(从4.4开始)首先,WordPress为特定帖子寻找模板。例如,如果帖子类型是,帖子是,WordPress 会查找 。productdmc-12single-product-dmc-12.php
single-{post-type}.php– 如果帖子类型是 ,WordPress 会寻找 .productsingle-product.php
single.php– WordPress 然后回退到 .single.php
singular.php– 然后它回退到 .singular.php
index.php最后,如上所述,WordPress最终会回退到。index.php

单页
用于呈现静态页面(后期类型)的模板文件。请注意,与其他帖子类型不同,它是WordPress的特殊内容,并使用以下路径:pagepage

custom template file– 分配给页面的页面模板。看。get_page_templates()
page-{slug}.php– 如果页面 slug 是 ,WordPress 将寻求使用 。recent-newspage-recent-news.php
page-{id}.php如果页面ID是6,WordPress将寻求使用。page-6.php
page.php
singular.php
index.php

类别
渲染类别存档索引页面在WordPress中使用以下路径:

category-{slug}.php– 如果类别的 slg 是 ,WordPress 将查找 。newscategory-news.php
category-{id}.php– 如果类别的 ID 是 ,WordPress 将查找 。6category-6.php
category.php
archive.php
index.php

标记
为了显示标签存档索引页面,WordPress使用以下路径:

tag-{slug}.php– 如果标签的 slug 是 ,WordPress 会寻找 。sometagtag-sometag.php
tag-{id}.php– 如果标签的 ID 是 ,WordPress 将查找 。6tag-6.php
tag.php
archive.php
index.php

自定义分类法
自定义分类使用略有不同的模板文件路径:

taxonomy-{taxonomy}-{term}.php– 如果分类法是,并且分类法的术语是,WordPress 将查找 在帖子格式的情况下,分类法是“post_format”,术语是“post-format-{format}”。即 对于链接帖子格式。sometaxsometermtaxonomy-sometax-someterm.php.taxonomy-post_format-post-format-link.php
taxonomy-{taxonomy}.php– 如果分类法是,WordPress 会寻找 .sometaxtaxonomy-sometax.php
taxonomy.php
archive.php
index.php

自定义帖子类型
自定义帖子类型使用以下路径来呈现相应的存档索引页面。

archive-{post_type}.php– 如果帖子类型是 ,WordPress 将查找 .productarchive-product.php
archive.php
index.php
(要呈现单个帖子类型模板,请参阅上面的单个帖子显示部分。

 

作者显示
基于上述示例,呈现作者存档索引页具有相当的解释性:

author-{nicename}.php– 如果作者的好名字是 ,WordPress 会寻找 .mattauthor-matt.php
author-{id}.php– 如果作者的ID是,WordPress会寻找。6author-6.php
author.php
archive.php
index.php

日期
基于日期的存档索引页按预期呈现:

date.php
archive.php
index.php
顶部 ↑

搜索结果
搜索结果遵循与其他模板类型相同的模式:

search.php
index.php
顶部 ↑

404(未找到)
同样,按以下顺序调用 404 模板文件:

404.php
index.php

附件
呈现附件页面(后期类型)使用以下路径:attachment

{MIME-type}.php– 可以是任何 MIME 类型(例如:、、)。对于 ,使用以下路径(按顺序):image.phpvideo.phppdf.phptext/plain
text-plain.php
plain.php
text.php
attachment.php
single-attachment-{slug}.php– 例如,如果附件 slug 是 ,WordPress 将查找 .holidaysingle-attachment-holiday.php
single-attachment.php
single.php
singular.php
index.php

嵌入
嵌入模板文件用于呈现正在嵌入的帖子。从4.5开始,WordPress使用以下路径:

embed-{post-type}-{post_format}.php首先,WordPress为特定帖子寻找模板。例如,如果它的帖子类型是并且具有音频格式,WordPress会寻找。postembed-post-audio.php
embed-{post-type}.php– 如果帖子类型是 ,WordPress 会寻找 .productembed-product.php
embed.phpWordPress然后回退到嵌入。.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
相同的行为适用于帖子 slug、术语名称和作者nicename。

顶部 ↑

筛选器层次结构
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_template”模板类型操作实际的层次结构。这允许请求 /author/用户名,其中用户名具有编辑器角色,以使用作者编辑器显示.php如果存在于当前主题目录中。author-{role}.phpauthor.php