如所讨论的,模板文件是模块化的,可重复使用的文件,用于在WordPress站点上生成网页。 一些模板文件(如页眉和页脚模板)用于所有网站的页面,而其他模板文件仅在特定条件下使用。
本文解释WordPress如何确定在单个页面上使用哪个模板文件。 如果要自定义现有的WordPress主题,它将帮助您确定需要编辑的模板文件。
>[warning] 提示:您还可以使用条件标签来控制在特定页面上加载哪些模板。
# 模板文件层次结构
## 概述
WordPress使用查询字符串来决定哪个模板或一组模板应用于显示页面。查询字符串是指向您网站每个部分的链接中的信息。它来自初始问号,可能包含多个由&符号分隔的参数。
简单地说,WordPress通过模板层次结构搜索,直到找到匹配的模板文件。要确定使用哪个模板文件,WordPress:
- 将每个查询字符串匹配到查询类型以确定正在请求哪个页面(例如,搜索页面,类别页面等);
- 按照模板层次结构确定的顺序选择模板;
- 在当前主题的目录中查找具有特定名称的模板文件,并使用层次结构指定的第一个匹配的模板文件。
- 除了基本的index.php模板文件外,您可以选择是否要实现特定的模板文件。
如果WordPress找不到具有匹配名称的模板文件,它将跳到层次结构中的下一个文件。如果WordPress找不到任何匹配的模板文件,将使用主题的index.php文件。
### 示例
如果您的博客位于http://example.com/blog/ ,访问者点击链接到类别页面(例如http://example.com/blog/category/your-cat/) ,WordPress会查找模板 在当前主题的目录中匹配类别的ID以生成正确的页面。 更具体地说,WordPress遵循以下过程:
- 在当前主题的目录中查找与该类别的插件匹配的模板文件。 如果类别slug是“unicorns”,则WordPress会查找名为category-unicorns.php的模板文件。
- 如果category-unicorns.php缺少且类别的ID为4,则WordPress将查找名为category-4.php的模板文件。
- 如果缺少类别4.php,WordPress将寻找一个通用类别模板文件category.php。
- 如果category.php不存在,WordPress将寻找一个通用归档模板archive.php。
- 如果archive.php也丢失,WordPress将回到主题模板文件index.php。
## 视觉概述
下图显示了哪些模板文件被调用以基于WordPress模板层次结构生成WordPress页面。
![](https://box.kancloud.cn/967756d30a1097078a83b1965707ff7d_1024x640.png)
您也可以与[此图交互](https://wphierarchy.com)。
## 模板层次详细
虽然模板层次结构更容易被理解为图表,但以下部分描述了WordPress为多种查询类型调用模板文件的顺序。
## 主页显示
默认情况下,WordPress设置您的网站的主页以显示最新的博文。 这个页面被称为博客帖子索引。 您也可以将您的博客帖子设置为在单独的静态页面上显示。 模板文件home.php用于呈现博客帖子索引,无论是用作首页还是单独的静态页面。 如果home.php不存在,WordPress将使用index.php。
- home.php
- index.php
>[warning] 注意:如果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寻找特定内容的模板。 例如,如果内容类型是产品,并且post slug是dmc-12,则WordPress会查找单个产品dmc-12.php。
- single- {post-type} .php - 如果帖子类型是产品,WordPress将寻找单一product.php。
- single.php - WordPress然后回到single.php。
- singular.php - 然后它回到singular.php。
- index.php - 最后,如上所述,WordPress最终会回到index.php。
## 单页
用于呈现静态页面的模板文件(页面后置类型)。 请注意,与其他后期类型不同,页面特别适用于WordPress,并使用以下修补程序:
自定义模板文件 - 分配给页面的页面模板。 请参阅get_page_templates()。
- page- {slug} .php - 如果该页面是最新消息,WordPress将会使用page-recent-news.php。
- page- {id} .php - 如果页面ID为6,WordPress将使用page-6.php。
- page.php
- singular.php
- index.php
## 类别
渲染类别归档索引页在WordPress中使用以下路径:
- category- {slug} .php - 如果类别的lug lug是新闻,WordPress将会查找category-news.php。
- category- {id} .php - 如果类别的ID为6,WordPress将寻找类别为6.php。
- category.php
- archive.php
- index.php
## 标签
要显示标签归档索引页面,WordPress使用以下路径:
- tag- {slug} .php - 如果标签的插件是某个标签,WordPress将会查找tag-sometag.php。
- tag- {id} .php - 如果标签的ID为6,WordPress将寻找标签6.php。
- tag.php
- archive.php
- index.php
## 自定义分类
自定义分类使用稍微不同的模板文件路径:
- taxonomy-{taxonomy}-{term}.php – 如果分类是某种类型,而分类学术语是某种语言,则WordPress将寻找分类法。 在发布格式的情况下,分类是“post_format”,术语是“post-format- {format}”。 即链接后期格式的taxonomy-post_format-post-format-link.php。
- taxonomy-{taxonomy}.php – 如果分类是多数,WordPress会寻找分类法 - sometax.php。
- taxonomy.php
- archive.php
- index.php
## 自定义内容类型
自定义帖子类型使用以下路径呈现相应的归档索引页面。
- archive- {post_type} .php - 如果帖子类型是产品,WordPress将寻找archive-product.php。
- archive.php
- index.php
> (要渲染单个帖子类型模板,请参阅上面的单个帖子显示部分。)
## 作者显示
基于上述示例,渲染作者存档索引页面是相当明确的:
- author- {nicename} .php - 如果作者的漂亮的名字是哑光,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.php
- index.php
## 附件
渲染附件页面(附件类型)需要遵循以下路径:
- MIME_type.php - 它可以是任何MIME类型(例如:image.php,video.php,application.php)。 对于text / plain,使用以下路径(顺序):
- text_plain.php
- plain.php
- text.php
- attachment.php
- single-attachment.php
- single.php
- index.php
## 嵌入模板
嵌入模板文件用于渲染正在嵌入的帖子。 自4.5以来,WordPress使用以下路径:
- embed- {post-type} - {post_format} .php - 首先,WordPress寻找特定帖子的模板。 例如,如果其帖子类型是产品,并且具有音频格式,则WordPress将寻找embed-product-audio.php。
- embed- {post-type} .php - 如果帖子类型是汽车,WordPress会寻找embed-car.php。
- embed.php - WordPress然后回到embed.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 (all mime types)
- attachment_template
- comments_popup
- embed_template
### 示例
例如,让我们采用默认的作者层次结构:
- author-{nicename}.php
- author-{id}.php
- author.php
要在author.php之前添加author- {role} .php,我们可以使用'author_template'模板类型来操作实际的层次结构。 这允许对/ author/username的请求,其中username具有编辑器的作用,使用author-editor.php(如果存在于当前主题目录中)显示。
```
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' );
```
- 简介
- 主题开发
- WordPress许可证
- 什么是主题
- 开发环境
- 主题开发示例
- 主题基础
- 模板文件
- 主样式表(style.css)
- 文章类型
- 规划主题文件
- 模板层级
- 模板标签
- 循环
- 主题函数
- 连接主题文件和目录
- 使用CSS和JavaScript
- 条件标签
- 类别,标签和自定义分类
- 模板文件
- 内容模板文件
- 页面模板文件
- 附件模板文件
- 自定义内容类型
- 部分和其他模板文件
- 评论模板
- 分类模板
- 404页面
- 主题功能
- 核心支持的功能
- 管理菜单
- 自定义Headers
- 自定义Logo
- 文章格式
- 置顶文章
- Sidebars
- Widgets
- 导航菜单
- 分页
- 媒体
- Audio
- Images
- Galleries
- Video
- 精选图片和缩略图
- 国际化
- 本地化
- 辅助功能
- 主题选项 – 自定义API
- 定制对象
- 改进用户体验的工具
- 定制JavaScript API
- JavaScript / Underscore.js渲染的自定义控件
- 高级用法
- 主题安全
- 数据消毒/逃避
- 数据验证
- 使用随机数
- 常见漏洞
- 高级主题
- 子主题
- UI最佳实践
- JavaScript最佳做法
- 主题单元测试
- 验证你的主题
- Plugin API Hooks
- 发布你的主题
- 所需的主题文件
- 测试
- 主题评论指南
- 写文档
- 提交你的主题到WordPress.org
- 参考文献
- 模板标签列表
- 条件标签列表
- 编码标准
- HTML编码标准
- CSS编码标准
- JavaScript编码标准
- PHP编码标准
- 插件开发
- 插件开发简介
- 什么是插件
- 插件基础
- 头部要求
- 包括软件许可证
- 启用 / 停用 Hooks
- 卸载方法
- 最佳做法
- 插件安全
- 检查用户功能
- 数据验证
- 保护输入
- 保护输出
- 随机数
- Hooks
- Actions
- Filters
- 自定义Hooks
- 高级主题
- 管理菜单
- 顶级菜单
- 子菜单
- 短代码
- 基本短码
- 封闭短码
- 带参数的短代码
- TinyMCE增强型短码
- 设置
- 设置API
- 使用设置API
- 选项API
- 自定义设置页面
- 元数据
- 管理帖子元数据
- 自定义元数据
- 渲染元数据
- 自定义文章类型
- 注册自定义文章类型
- 使用自定义文章类型
- 分类
- 使用自定义分类
- 在WP 4.2+中使用“split术语”
- 用户
- 创建和管理用户
- 使用用户元数据
- 角色和功能
- HTTP API
- JavaScript
- jQuery
- Ajax
- 服务器端PHP和入队
- Heartbeat API
- 概要
- 计划任务
- 了解WP-Cron计划
- 安排WP-Cron 事件
- 将WP-Cron挂接到系统任务计划程序中
- WP-Cron简单测试
- 国际化
- 本地化
- 如何国际化您的插件
- 国际化安全
- WordPress.org
- 详细插件指南
- 规划您的插件
- 如何使用Subversion
- 插件开发者常见问题
- 开发工具
- Debug Bar 和附加组件
- 辅助插件
- REST API手册
- 资源
- 文章
- 文章修订
- 文章类型
- 文章状态
- 类别
- 标签
- 页面
- 评论
- 分类
- 媒体
- 用户
- 设置
- 使用REST API
- 全局参数
- 分页
- 链接和嵌入
- 发现
- 认证
- 经常问的问题
- 骨干JavaScript客户端
- 客户端库
- 扩展REST API
- 添加自定义端点
- 自定义内容类型
- 修改回应
- 模式
- 词汇表
- 路由和端点
- 控制器类