如所讨论的, 模板文件 是模块化的,可重复使用的文件,用于生成WordPress网站的网页。一些模板文件(如页眉和页脚模板)上使用您网站的所有网页,而有些则只能在特定条件下使用。
本文介绍的WordPress是如何确定的模板文件(S)到单个页面使用的。如果您想自定义现有的WordPress主题它会帮助你决定哪些模板文件需要进行编辑。
提示:您还可以使用条件标签来控制模板加载一个特定的页面上。
模板文件层次#模板文件层次
概述#概述
WordPress使用的查询字符串来决定哪些模板或模板集应该用于显示该页面。查询字符串是包含在链接到你的网站的各个部分的信息。它配备了最初的问号后,可能包含一些由&符号分隔参数。
简单地说,WordPress的向下搜索通过模板层次结构,直到它找到一个匹配的模板文件。要确定要使用的模板文件,WordPress的:
- 相匹配的所有查询字符串查询类型来决定被请求的页面(例如,搜索页面,一个分类页面等);
- 选择由模板层次确定的顺序模板;
- 查找与当前主题目录特定名称的模板文件,并使用第一个匹配的模板文件由指定的层次结构。
有了基本的例外
index.php模板文件,可以选择是否要实现一个特定的模板文件或没有。
如果WordPress的无法找到匹配的名称的模板文件,它会跳到层次结构中的下一个文件。如果WordPress的无法找到任何匹配的模板文件,主题的
index.php文件将被使用。
举例#示例
如果你的博客是在
http://example.com/blog/和一个访问者点击一个链接到分类页面如
http://example.com/blog/category/your-cat/,WordPress的会在当前主题的目录中的模板文件相匹配的类别的ID生成正确的页面。更具体地说,WordPress的如下步骤:
- 会在当前主题的目录中的模板文件,该类别的蛞蝓匹配。如果类别蛞蝓是“独角兽”,那么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
。
视觉概述#视觉概述
下图显示了哪些模板文件调用生成基于WordPress的模板层级一个WordPress页面。
你也可以用这个图互动。
模板层次细节#模板层次细节
虽然模板层次是比较容易理解的图,以下各部分介绍了模板文件由WordPress呼吁一些查询类型的顺序。
首页显示#首页显示
默认情况下,WordPress的设置您的网站的主页,以显示你最新的博客文章。此网页被称为博客文章的索引。您还可以设置您的博客文章显示一个单独的静态页面上。模板文件
home.php是用来渲染博客文章的索引,它是否被用作头版或单独的静态页面上。如果
home.php不存在,WordPress会使用
index.php。
home.php
index.php
注意:如果
front-page.php存在,它将覆盖
home.php模板。
头版显示#头版显示
该
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会显示的最佳方式。
单个帖子#单个帖子
单后模板文件用于呈现一个职位。WordPress使用以下路径:
single-{post-type}-{slug}.php
– (自4.4)首先,WordPress的查找的特定职位的模板。例如,如果后期型的product
和后蛞蝓是dmc-12
,在WordPress会寻找single-product-dmc-12.php
。single-{post-type}.php
-如果岗位类型product
,在WordPress会寻找single-product.php
。single.php
– WordPress的然后回落到single.php
。singular.php
-然后回落到singular.php
。index.php
-最后,如上面提到的,WordPress的最终落回index.php
。
单页#单页
使用模板文件来渲染一个静态页面(
page类型后)。请注意,与其他类型的后期制作,
page是特别的WordPress和使用下面的补丁:
custom template file
-本页面模板分配到该页面。见get_page_templates()
。page-{slug}.php
-如果页面蛞蝓是recent-news
,WordPress会看使用page-recent-news.php
。page-{id}.php
-如果页面ID是6,WordPress会看使用page-6.php
。page.php
singular.php
index.php
分类#分类
渲染分类存档的索引页使用WordPress中以下路径:
category-{slug}.php
-如果该类别的鼻涕虫是news
,WordPress会寻找category-news.php
。category-{id}.php
-如果该类别的ID是6
,WordPress会寻找category-6.php
。category.php
archive.php
index.php
以#拿
要显示一个标签存档索引页,WordPress使用以下路径:
tag-{slug}.php
-如果标签的鼻涕虫是sometag
,WordPress会寻找tag-sometag.php
。tag-{id}.php
-如果标签的ID是6
,WordPress会寻找tag-6.php
。tag.php
archive.php
index.php
自定义分类#自定义分类
自定义分类使用稍有不同的模板文件路径:
taxonomy-{taxonomy}-{term}.php
-如果分类学sometax
,和分类 的任期someterm
,WordPress会寻找taxonomy-sometax-someterm.php.
在的情况下,后期格式,分类标准是“post_format”和术语是“后格式化{}格式。即taxonomy-post_format-post-format-link.php
该链接后的格式。taxonomy-{taxonomy}.php
-如果是分类sometax
,WordPress的将寻找taxonomy-sometax.php
。taxonomy.php
archive.php
index.php
自定义文章类型#自定义文章类型
自定义文章类型使用以下路径呈现相应的存档的索引页。
archive-{post_type}.php
-如果岗位类型product
,WordPress会寻找archive-product.php
。archive.php
index.php
(对于渲染单篇文章类型模板,请参阅单后显示上述部分。)
作者显示#作者显示屏
根据上面的例子,笔者渲染存档的索引页是相当的解释:
author-{nicename}.php
-如果作者的好听的名字是matt
,WordPress会寻找author-matt.php
。author-{id}.php
-如果作者的ID是6
,WordPress会寻找author-6.php
。author.php
archive.php
index.php
日期#日期
基于日期的存档索引页呈现你所期望的:
date.php
archive.php
index.php
搜索结果#搜索结果
搜索结果遵循相同图案作为其它模板类型:
search.php
index.php
404(未找到)#404(未找到)
同样,404的模板文件被称为顺序是:
404.php
index.php
附件#附件
渲染附件页面(
attachment类型后)需要按照如下路径:
MIME_type.php
-它可以是任何的MIME类型(例如:image.php
,video.php
,application.php
)。为text/plain
,下面的路径被使用(按顺序):text.php
plain.php
text_plain.php
attachment.php
single-attachment.php
single.php
index.php
嵌入#嵌入功能
嵌入模板文件用于呈现被嵌入的一个职位。由于4.5,WordPress使用以下路径:
embed-{post-type}-{post_format}.php
-首先,WordPress的查找的特定职位的模板。举例来说,如果它的 信息类型是product
它具有音频格式,在WordPress会寻找embed-product-audio.php
。embed-{post-type}.php
-如果岗位类型car
,在WordPress会寻找embed-car.php
。embed.php
– WordPress的然后回落到嵌入.php
。- 最后,WordPress的最终回落到
wp-includes/theme-compat/embed.php
过滤层次#过滤层次
WordPress的模板系统可以过滤层次结构。这意味着,你可以插入并在层次结构的特定点改变的事情。过滤器(位于get_query_template()
功能)使用该过滤器名:
"{$type}_template"其中,
$type是在没有层次结构的文件名
.php扩展名。
这里是在过滤器中的层次结构的所有模板类型的完整列表:
- index_template
- 404_template
- archive_template
- author_template
- category_template
- TAG_TEMPLATE
- taxonomy_template
- date_template
- home_template
- front_page_template
- page_template
- paged_template
- search_template
- single_template
- text_template,plain_template,text_plain_template(所有MIME类型)
- attachment_template
- comments_popup
- embed_template
举例#示例
例如,让我们默认笔者层次:
author-{nicename}.php
author-{id}.php
author.php
要添加
author-{role}.php之前
author.php,我们可以操纵使用’author_template“模板类型实际的层次结构。这允许/作者/用户名其中用户名具有编辑器的作用,以显示是否出现在当前themes目录编写者-editor.php的请求。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 |
function author_role_template( $templates = '' ) { $author = get_queried_object(); $role = $author ->roles[0]; if ( ! is_array ( $templates ) && ! empty ( $templates ) ) { $templates = locate_template( array ( "author-$role.php" , $templates ), false ); } elseif ( empty ( $templates ) ) { $templates = locate_template( "author-$role.php" , false ); } else { $new_template = locate_template( array ( "author-$role.php" ) ); if ( ! empty ( $new_template ) ) { array_unshift ( $templates , $new_template ); } } return $templates ; } add_filter( 'author_template' , 'author_role_template' ); |