作者:日本化妆品专卖_703 | 来源:互联网 | 2014-05-16 09:58
简介WordPress模板像拼图一样拼在一起,来生成你网站的页面。有些模板,比如页眉和页脚,是所有页面公用的;也有的只在一些特定页面/情况中使用。这篇文章是关于:这篇文章回答了下面这些问题:WordPress生成特定页面的时候调用了什么模板文件?这篇文章可能对谁有用:自从WordPress引入主
简介
WordPress模板像拼图一样拼在一起,来生成你网站的页面。有些模板,比如页眉和页脚,是所有页面公用的;也有的只在一些特定页面/情况中使用。
这篇文章是关于:
这篇文章回答了下面这些问题:
WordPress生成特定页面的时候调用了什么模板文件?
这篇文章可能对谁有用:
自从WordPress引入主题以来,模板的可配置性越来越高,为了开发WordPress主题,你有必要了解WordPress是如何为不同页面选择模板文件的。如果你希望自定义一个现有的主题,这篇文章将告诉你需要修改那些模板文件。
使用条件标签函数判断
WordPress 提供多种将查询匹配到模板的方式。主题开发者也可以使用条件标签来控制特定页面的模板使用。有些Wordpress主题可能并未实现这里提到的所有功能。有些主题则使用条件标签来载入其他模板文件。参见条件标签页面和"基于查询"的主题开发。
模版文件的分层结构
基本理念
WordPress使用查询字符串——你网站中每个链接所包含的信息,来决定使用哪个或哪些模板文件。
首先,wordpress匹配所有的查询字符串来查询类型 — 例如它决定何种类型的页面 (搜索页面,分类页面,首页等等)被请求.
然后相应的模板被选择 — web页面内容生成 — 通过WordPress模板层次指定顺序, 判断特定的WordPress主题中的模板文件.
WordPress通过当前主题目录中的特定名字查找模板文件并且使用当前查询条件匹配列出的第一个模板文件.
如果index.php?模板文件出现例外, 主题开发者可以自由选择他们想要实现的特定模板文件.如果WordPress不能找到匹配的模板文件, 它将会跳到当前层级的下一个文件名. 如果WordPress找不到任何匹配的模板文件,index.php?(主题首页模板文件)将会被默认使用.
举例
如果你的博客网址是?http://example.com/blog/?,有一个访客点击了其中一个分类的链接:http://example.com/blog/category/your-cat/: WordPress将按照如下方式寻找模板文件并生成页面。
WordPress在当前主题目录下寻找一个匹配当前文章分类ID的模板文件。
- 如果文章分类ID是4, WordPress会找这样一个文件:?category-4.php.
- 如果没有这个文件, WordPress再找通用的文章分类模板,?category.php.
- 如果这也没有, WordPress再找通用文章归档模板,?archive.php.
- 如果还没有, WordPress回到主题主模板文件,?index.php.
如果访客访问了你的首页:?http://example.com/blog/:
- WordPress首先看是否有?静态首页. 如果有,则根据?模板层次载入那个页面.
- 如果没有静态首页,则去到?home.php?,用它来生成请求的页面。
- 如果?home.php?也没有, 再回到当前主题目录下的index.php?文件,用它来生成页面。
概览
下面的图表显示基于WordPress模板层级哪一个模板文件将会被调用来生成一个WordPress页面.
模板层次细节
下面的章节描述了通过WordPress的查询类型模板文件被调用的顺序.
首页显示
用来渲染博客文章首页的模板文件, 无论是站点首页还是静态页面.注意 : 在站点首页, 首页模板优先于博客文章Index模板.
-
- front-page.php?- 用于最新文章或者静态页面在设置?->?阅读章节的首页显示
- 页面显示规则?- 当设置?->?阅读章节中的首页显示的首页被设置时有效
- 首页显示规则?- 当设置?->?阅读中首页显示的发布文章被设置时有效
文章页面显示
用于渲染单个文章页面的模板文件
-
- single-{post_type}.php?- 如果文章类型?是product的话, WordPress将会查找single-product.php.
- single.php
- index.php
页面显示
渲染静态页面的模板文件(page?post-type)
-
- 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
- index.php
分类显示
用于渲染一个分类归档页面的模板文件
-
- category-{slug}.php?- 如果分类是news, WordPress 将会查找category-news.php
- category-{id}.php?- 如果分类ID是?6, WordPress 将会查找category-6.php
- category.php
- archive.php
- index.php
标签显示
用于显示标签归档页面的模板文件
-
- 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' 且类别是 'post-format-{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?- 如果作者昵称是rami, WordPress 将会查找?author-rami.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.php
- index.php
附件显示
用于渲染单个附件(attachment?post-type)页面的模板文件
-
- MIME_type.php?- 可以是任意MIME类型?(image.php,?video.php,?application.php). For?text/plain, 顺序是:
- text.php
- plain.php
- text_plain.php
- attachment.php
- single-attachment.php
- single.php
- index.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 (all mime types)
- attachment_template
- comments_popup
举例
例如,让我们使用默认的作者层级:
- author-{nicename}.php
- author-{id}.php
- author.php
为了将author-{role}.php添加到author.php之前我们可以操作实际层级使用?'author_template' 钩子. This allows a request for /author/username where username has the role of editor to display using author-editor.php if present in the current themes directory.
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' );
源文件
- 模板层级函数定义在?
wp-includes/theme.php中
.
- 模板加载层级定义在?
wp-includes/template-loader.php中
.