【转译】WordPress模板结构

Posted by 橙叶 on Thu, Aug 18, 2016

如所讨论的,  模板文件  是模块化的,可重复使用的文件,用于生成WordPress网站的网页。一些模板文件(如页眉和页脚模板)上使用您网站的所有网页,而有些则只能在特定条件下使用。

本文介绍的WordPress是如何确定的模板文件(S)到单个页面使用的。如果您想自定义现有的WordPress主题它会帮助你决定哪些模板文件需要进行编辑。

提示:您还可以使用条件标签来控制模板加载一个特定的页面上。

模板文件层次模板文件层次

概述概述

WordPress使用的查询字符串来决定哪些模板或模板集应该用于显示该页面。查询字符串是包含在链接到你的网站的各个部分的信息。它配备了最初的问号后,可能包含一些由&符号分隔参数。

简单地说,WordPress的向下搜索通过模板层次结构,直到它找到一个匹配的模板文件。要确定要使用的模板文件,WordPress的:

  1. 相匹配的所有查询字符串查询类型来决定被请求的页面(例如,搜索页面,一个分类页面等);
  2. 选择由模板层次确定的顺序模板;
  3. 查找与当前主题目录特定名称的模板文件,并使用第一个匹配的模板文件由指定的层次结构。

有了基本的例外

index.php
模板文件,可以选择是否要实现一个特定的模板文件或没有。

如果WordPress的无法找到匹配的名称的模板文件,它会跳到层次结构中的下一个文件。如果WordPress的无法找到任何匹配的模板文件,主题的

index.php
文件将被使用。

顶部↑

举例示例

如果你的博客是在

http://example.com/blog/
和一个访问者点击一个链接到分类页面如 
http://example.com/blog/category/your-cat/
,WordPress的会在当前主题的目录中的模板文件相匹配的类别的ID生成正确的页面。更具体地说,WordPress的如下步骤:

  1. 会在当前主题的目录中的模板文件,该类别的蛞蝓匹配。如果类别蛞蝓是“独角兽”,那么WordPress的查找一个名为模板文件
    category-unicorns.php
  2. 如果
    category-unicorns.php
    缺少与类别的ID为4,WordPress的查找名为模板文件
    category-4.php
  3. 如果
    category-4.php
    丢失,WordPress会寻找一个通用类模板文件
    category.php
  4. 如果
    category.php
    不存在,WordPress会寻找一个通用模板,归档,
    archive.php
  5. 如果
    archive.php
    也不见了,WordPress会回落到主题模板文件
    index.php

顶部↑

视觉概述视觉概述

下图显示了哪些模板文件调用生成基于WordPress的模板层级一个WordPress页面。

你也可以用这个图互动

顶部↑

模板层次细节模板层次细节

虽然模板层次是比较容易理解的图,以下各部分介绍了模板文件由WordPress呼吁一些查询类型的顺序。

顶部↑

首页显示首页显示

默认情况下,WordPress的设置您的网站的主页,以显示你最新的博客文章。此网页被称为博客文章的索引。您还可以设置您的博客文章显示一个单独的静态页面上。模板文件

home.php
是用来渲染博客文章的索引,它是否被用作头版或单独的静态页面上。如果 
home.php
 不存在,WordPress会使用 
index.php

  1. home.php
  2. index.php
    

注意:如果

front-page.php
 存在,它将覆盖  
home.php
 模板。

顶部↑

头版显示头版显示

front-page.php
模板文件是用来使您的网站的头版,头版是否显示博客文章指数(如上所述)或一个静态页面。前面的页面模板优先于博客帖子指数(
home.php
)的模板。如果该
front-page.php
文件不存在,WordPress会无论是使用
home.php
还是
page.php
取决于设置的设置→阅读文件。如果没有这些文件的存在,它会使用该
index.php
文件。

  1. front-page.php
     -用于既有“ 你最新的帖子 ”或“ 静态页面 ”中设定的头版显示的设置→阅读部分。
  2. home.php
     -如果WordPress的无法找到  
    front-page.php
    和“ 你的最新帖子 ”中的设置头版显示部分,它会寻找
    home.php
    。此外,WordPress会寻找时,这个文件的帖子页面中设置头版显示部分。
  3. page.php
     -当“ 头版 ”被设置在前端页面显示部分。
  4. index.php
     -当“ 你最新的帖子 ”被设置在前端页面显示部分,但  
    home.php
    不存在 在头版设置,但
    page.php
    不存在。

正如你所看到的,有很多的规则,以什么样的路径WordPress的需要。使用上面的图是确定什么WordPress会显示的最佳方式。

顶部↑

单个帖子单个帖子

单后模板文件用于呈现一个职位。WordPress使用以下路径:

  1. single-{post-type}-{slug}.php
     – (自4.4)首先,WordPress的查找的特定职位的模板。例如,如果后期型
    product
    和后蛞蝓是
    dmc-12
    ,在WordPress会寻找
    single-product-dmc-12.php
  2. single-{post-type}.php
    -如果岗位类型
    product
    ,在WordPress会寻找
    single-product.php
  3. single.php
    – WordPress的然后回落到
    single.php
  4. singular.php
    -然后回落到
    singular.php
  5. index.php
    -最后,如上面提到的,WordPress的最终落回
    index.php

顶部↑

单页单页

使用模板文件来渲染一个静态页面(

page
类型后)。请注意,与其他类型的后期制作,
page
是特别的WordPress和使用下面的补丁:

  1. custom template file
     -本页面模板分配到该页面。见
    get_page_templates()
  2. page-{slug}.php
     -如果页面蛞蝓是
    recent-news
    ,WordPress会看使用
    page-recent-news.php
  3. page-{id}.php
     -如果页面ID是6,WordPress会看使用
    page-6.php
  4. page.php
  5. singular.php
  6. index.php

顶部↑

分类分类

渲染分类存档的索引页使用WordPress中以下路径:

  1. category-{slug}.php
     -如果该类别的鼻涕虫是
    news
    ,WordPress会寻找
    category-news.php
  2. category-{id}.php
     -如果该类别的ID是
    6
    ,WordPress会寻找
    category-6.php
  3. category.php
  4. archive.php
  5. index.php

顶部↑

要显示一个标签存档索引页,WordPress使用以下路径:

  1. tag-{slug}.php
     -如果标签的鼻涕虫是
    sometag
    ,WordPress会寻找
    tag-sometag.php
  2. tag-{id}.php
     -如果标签的ID是
    6
    ,WordPress会寻找
    tag-6.php
  3. tag.php
  4. archive.php
  5. index.php

顶部↑

自定义分类自定义分类

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

  1. taxonomy-{taxonomy}-{term}.php
     -如果分类学
    sometax
    ,和分类 的任期
    someterm
    ,WordPress会寻找
    taxonomy-sometax-someterm.php.
    在的情况下,后期格式,分类标准是“post_format”和术语是“后格式化{}格式。即
    taxonomy-post_format-post-format-link.php
     该链接后的格式。
  2. taxonomy-{taxonomy}.php
     -如果是分类
    sometax
    ,WordPress的将寻找
    taxonomy-sometax.php
  3. taxonomy.php
  4. archive.php
  5. index.php

顶部↑

自定义文章类型自定义文章类型

自定义文章类型使用以下路径呈现相应的存档的索引页。

  1. archive-{post_type}.php
     -如果岗位类型
    product
    ,WordPress会寻找
    archive-product.php
  2. archive.php
  3. index.php

(对于渲染单篇文章类型模板,请参阅单后显示上述部分。)

顶部↑

作者显示作者显示屏

根据上面的例子,笔者渲染存档的索引页是相当的解释:

  1. author-{nicename}.php
     -如果作者的好听的名字是
    matt
    ,WordPress会寻找
    author-matt.php
  2. author-{id}.php
     -如果作者的ID是
    6
    ,WordPress会寻找
    author-6.php
  3. author.php
  4. archive.php
  5. index.php

顶部↑

日期日期

基于日期的存档索引页呈现你所期望的:

  1. date.php
  2. archive.php
  3. index.php

顶部↑

搜索结果搜索结果

搜索结果遵循相同图案作为其它模板类型:

  1. search.php
  2. index.php

顶部↑

404(未找到)404(未找到)

同样,404的模板文件被称为顺序是:

  1. 404.php
  2. index.php

顶部↑

附件附件

渲染附件页面(

attachment
类型后)需要按照如下路径:

  1. MIME_type.php
    -它可以是任何的MIME类型(例如: 
    image.php
    video.php
    application.php
    )。为
    text/plain
    ,下面的路径被使用(按顺序):
    1. text.php
    2. plain.php
    3. text_plain.php
  2. attachment.php
  3. single-attachment.php
  4. single.php
  5. index.php

顶部↑

嵌入嵌入功能

嵌入模板文件用于呈现被嵌入的一个职位。由于4.5,WordPress使用以下路径:

  1. embed-{post-type}-{post_format}.php
     -首先,WordPress的查找的特定职位的模板。举例来说,如果它的  信息类型
    product
    它具有音频格式,在WordPress会寻找
    embed-product-audio.php
  2. embed-{post-type}.php
    -如果岗位类型
    car
    ,在WordPress会寻找
    embed-car.php
  3. embed.php
    – WordPress的然后回落到嵌入
    .php
  4. 最后,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'
 
);


comments powered by Disqus