WordPress主题开发( 七)之—— 模版文件继承规则
WordPress主题开发( 七)之—— 模版文件继承规则
- 概述
- 模板文件层次结构
- 示例
- 可视化概述
- 层次结构详细信息
- 主页显示
- 首页显示
- 单文章页面
- 单页
- 分类目录
- 标签
- 自定义分类
- 自定义文章类型
- 作者显示
- 日期
- 搜索结果
- 404(未找到)
- 附件
- 嵌入功能
- 非ASCII字符的处理方法
- 过滤层次结构
- 示例
概述
WordPress模板文件是用于生成网页的模块化、可重用的文件。不同的模板文件用于不同的页面或页面类型。了解WordPress如何确定使用哪个模板文件对于自定义主题和网站开发非常重要。本文将介绍WordPress的模板文件继承规则,帮助您确定在不同情况下使用哪个模板文件,并控制页面的外观和布局。
模板文件层次结构
WordPress使用查询字符串来决定应该使用哪个模板文件来显示页面。查询字符串包含在网站链接的URL中,出现在初始问号之后,并可能包含多个由“&”符号分隔的参数。
简而言之,WordPress会按照以下步骤来确定要使用的模板文件:
-
匹配查询类型:WordPress将根据查询字符串中的信息确定用户请求的页面类型(例如,搜索页面、分类页面等)。
-
确定模板文件:WordPress会按照模板文件的层次结构来确定要使用的模板文件。
WordPress会在当前主题的目录中查找特定名称的模板文件,并使用层次结构中最先匹配的模板文件。
除了基本的index.php模板文件之外,您可以自定义使用其他模板文件来显示页面。
如果WordPress找不到具有与查询匹配的模板文件,它将继续查找层次结构中的下一个文件。如果WordPress仍然找不到匹配的模板文件,最终将使用index.php模板来显示页面。
示例
让我们通过一个示例来说明这个过程。假设用户访问您的网站上的分类目录存档页面:http://example.com/blog/category/your-cat/。WordPress会按照以下过程来确定要使用的模板文件:
-
在当前主题的目录中查找与分类别名匹配的模板文件。如果分类别名是“unicorns”,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使用home.php模板文件来显示文章索引,无论您选择最新文章还是静态页面作为首页。如果home.php不存在,WordPress将回退到使用index.php。
home.phpindex.php
如果存在front-page.php,它将覆盖home.php模板文件的显示。
首页显示
front-page.php模板文件是WordPress首选查找的首页模板文件。该模板文件的优先级高于home.php。如果front-page.php文件不存在,WordPress将根据设置→阅读中的选项决定使用home.php还是page.php文件。如果这两个文件都不存在,WordPress将回退到使用index.php。
front-page.php:当在设置→阅读中选择“您的最新帖子”或“静态页面”时,这个模板文件优先使用。home.php:如果WordPress找不到`front-page.php
,并且在设置→阅读中选择“您的最新文章”,那么WordPress将查找并使用home.php`。此外,当您设置了某个页面作为首页时,WordPress也会查找并使用此文件。
page.php:当在设置→阅读中选择“首页”时。index.php:如果首页设置为“您最新的文章”,但home.php不存在,或者设置了首页,但page.php不存在时,WordPress将使用此模板文件。
如上所述,WordPress会根据您的设置和模板文件的存在性来确定使用哪个模板文件。这些规则构成了一个层次结构,图表是理解的好方式。
单文章页面
单文章页面用于显示单篇文章的内容。WordPress使用以下规则来选择模板文件:
single-{post-type}-{slug}.php:首先,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:如果single.php也不存在,WordPress将回退到singular.php。index.php:最后,如果所有模板都找不到,WordPress将使用默认的index.php。
单页
单页用于呈现静态页面的模板文件,这些页面被视为一种特殊的文章类型。WordPress使用以下规则来选择单页模板文件:
- 自定义模板文件:首先,WordPress会查找您在后台选择的页面模板,这些模板可以在页面编辑界面中选择。
page-{slug}.php:如果页面的别名是"recent-news",WordPress将查找page-recent-news.php。page-{id}.php:如果页面的ID是6,WordPress将查找page-6.php。page.php:如果以上模板文件都不存在,WordPress将使用page.php。singular.php:如果page.php也不存在,WordPress将回退到singular.php。index.php:最后,如果所有模板都找不到,WordPress将使用默认的index.php。
分类目录
WordPress使用以下层次结构来渲染分类目录页面:
category-{slug}.php:如果分类目录的别名是"news",WordPress将查找category-news.php。category-{id}.php:如果类别的ID是6,WordPress将查找category-6.php。category.php:如果以上两者都不存在,WordPress将使用category.php。archive.php:如果category.php也不存在,WordPress将回退到archive.php。index.php:最后,如果所有模板都找不到,WordPress将使用默认的index.php。
标签
要显示标签存档页面,WordPress使用以下路径:
tag-{slug}.php:如果标签的别名是"sometag",WordPress将查找tag-sometag.php。tag-{id}.php:如果标签的ID是6,WordPress将查找tag-6.php。tag.php:如果以上两者都不存在,WordPress将使用tag.php。archive.php:如果tag.php也不存在,WordPress将回退到archive.php。index.php:最后,如果所有模板都找不到,WordPress将使用默认的index.php。
自定义分类
WordPress查找自定义分类法的模板文件路径的方法略有不同:
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:如果以上两者都不存在,WordPress将使用taxonomy.php。archive.php:如果taxonomy.php也不存在,WordPress将回退到archive.php。index.php:最后,如果所有模板都找不到,WordPress将使用默认的index.php。
自定义文章类型
自定义文章类型使用以下路径来呈现相应的存档页面:
archive-{post_type}.php:如果帖子类型是"product",WordPress将寻找archive-product.php。archive.php:如果archive-product.php不存在,WordPress将使用通用的archive.php。index.php:如果以上模板文件都不存在,WordPress将使用默认的index.php。
请注意,对于单个自定义文章类型的模板,请参阅上面的“单个文章页面”部分。
作者显示
基于上述示例,呈现作者存档页面的层次结构显而易见:
author-{nicename}.php:如果作者的名字是"matt",WordPress将寻找author-matt.php。author-{id}.php:如果作者的ID是6,WordPress将寻找author-6.php。author.php:如果以上两者都不存在,WordPress将使用author.php。archive.php:如果author.php也不存在,WordPress将回退到archive.php。index.php:最后,如果所有模板都找不到,WordPress将使用默认的index.php。
日期
基于日期的存档页面按照以下路径查找模板:
date.php:首选,WordPress会查找date.php。archive.php:如果date.php不存在,WordPress将使用archive.php。index.php:最后,如果以上两者都不存在,WordPress将使用默认的index.php。
搜索结果
搜索结果遵循与其他模板类型相同的模式:
search.php
:首选,WordPress会查找search.php。
index.php:最后,如果search.php不存在,WordPress将使用默认的index.php。
404(未找到)
同样,按以下顺序调用404模板文件:
404.php:首选,WordPress会查找404.php。index.php:最后,如果404.php不存在,WordPress将使用默认的index.php。
附件
呈现附件页面(attachment文章类型)使用以下路径:
{MIME-type}.php:可以是任何MIME类型(例如:image.php,video.php,pdf.php)。对于text/plain,使用以下路径(按顺序):text-plain.phpplain.phptext.php
single-attachment-{slug}.php:例如,如果附件的别名是"holiday",WordPress会查找single-attachment-holiday.php。single-attachment.php:如果以上两者都不存在,WordPress将寻找single-attachment.php。single.php:如果single-attachment.php也不存在,WordPress将回退到single.php。singular.php:如果single.php也不存在,WordPress将回退到singular.php。index.php:最后,如果所有模板都找不到,WordPress将使用默认的index.php。
嵌入功能
嵌入模板文件用于渲染嵌入到其他页面或网站的文章。从WordPress 4.5开始,WordPress使用以下路径:
embed-{post-type}-{post_format}.php:首选,WordPress会查找特定文章类型的模板。例如,如果一篇文章的文章类型是"post"并且格式是音频格式,WordPress会查找embed-post-audio.php。embed-{post-type}.php:如果文章类型是"product",WordPress会查找embed-product.php。embed.php:最后,WordPress将使用embed.php。- 最后,WordPress最终回退到内置的
wp-includes/theme-compat/embed.php模板。
非ASCII字符的处理方法
从WordPress 4.7开始,模板名称的任何动态部分(其名称中包含非ASCII字符)实际上都支持未编码和已编码的形式。您可以选择使用其中任何一个。
以下是名称为"Hello World😀"的页面的页面模板层次结构,其ID为6:
page-hello-world-😀.phppage-hello-world-%f0%9f%98%80.phppage-6.phppage.phpsingular.php
这些规则同样适用于文章别名、术语名称和作者名字。
过滤层次结构
WordPress模板系统允许您使用过滤器来修改模板层次结构。这意味着您可以在层次结构的特定点插入和更改内容。过滤器位于get_query_template()函数中,使用过滤器“{KaTeX parse error: Expected 'EOF', got '}' at position 5: type}̲_template”,其中type是模板类型。
以下是模板层次结构中所有可用过滤器的列表:
embed_template404_templatesearch_templatefrontpage_templatehome_templatetaxonomy_templateattachment_templatesingle_templatepage_templatesingular_templatecategory_templatetag_templateauthor_templatedate_templatearchive_templateindex_template
您可以使用这些过滤器修改模板文件的调用顺序,以实现更高度的定制。
示例
例如,默认的作者存档模板层次结构如下:
author-{nicename}.phpauthor-{id}.phpauthor.php
如果您想在author.php之前添加一个author-{role}.php模板文件,以针对某个角色设置指定的模板文件,您可以使用author_template模板过滤器来修改作者存档模板的层次结构。
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');
这个示例演示了如何使用author_template过滤器来添加一个特定角色的作者存档模板文件。
希望这个详细的目录结构和示例对您理解WordPress模板文件的继承规则有所帮助。这将使您能够更好地控制和自定义您的WordPress主题。关注longm龙哥,祝你开放不迷路
相关文章:
WordPress主题开发( 七)之—— 模版文件继承规则
WordPress主题开发( 七)之—— 模版文件继承规则 概述模板文件层次结构示例可视化概述层次结构详细信息主页显示首页显示单文章页面单页分类目录标签自定义分类自定义文章类型作者显示日期搜索结果404(未找到)附件嵌入功能非ASCII…...
Simulink 封装
快捷键: Edit Mask:CtrlM Look Under Mask:CtrlU 封装之后的模型: Edit Mask界面: 双击模块后的提示界面: 封装的模块内部:...
【AI视野·今日Robot 机器人论文速览 第三十六期】Tue, 19 Sep 2023
AI视野今日CS.Robotics 机器人学论文速览 Tue, 19 Sep 2023 (showing first 100 of 112 entries) Totally 112 papers 👉上期速览✈更多精彩请移步主页 Interesting: 📚In-Hand Object Rotation, RotateIt 提出了一种基于视觉与触觉的物体旋转朝向的方法…...
Java随笔
动态SQL 是指根据不同的条件或参数生成不同的SQL语句的技术。在实际开发中,我们经常需要根据用户的输入或其他条件来生成不同的SQL语句,动态SQL就能满足这个需求。 在Java中,使用MyBatis作为ORM框架时,可以通过在Mapper.xml文件…...
ARINC825规范简介
ARINC825规范简介 机载CAN网络通用标准 ARINC825规范全称为机载CAN网络通用标准(The General Standardization of CAN for Airborne Use)。顾名思义,ARINC825规范是建立在CAN物理网络基础上的高层规范。CAN网络使用共享的双绞电缆传输数据&…...
SQLAlchemy列参数的使用和query函数的使用
目录 Column常用参数 代码演示 代码刨析 query函数的使用 基本用法 常见用法示例 查询所有记录 根据条件查询 查询第一条符合条件的记录 查询特定列的值 添加排序规则 使用聚合函数 连接查询 使用filter_by Column常用参数 primary_key:True设置某个字…...
产权未转移登记的离婚析产协议不能对抗债权人
债权人代位析产纠纷作为一个新的民事案由,是民事执行阶段中债务人不能到期清偿债务,又怠于分割共同财产或以诉讼方式分割共同财产,而由债权人请求代替债务人向其他共有人提出分割财产以实现债权的诉讼。债权人代位析产,增加了债权…...
python+nodejs+php+springboot+vue 导师双选系统
为了直观显示系统的功能,运用用例图这样的工具显示分析的结果。分析的导师功能如下。导师管理导师选择信息,管理项目,管理项目提交并对学员提交的项目进行指导。 为了直观显示系统的功能,运用用例图这样的工具显示分析的结果。分析…...
paddle2.3-基于联邦学习实现FedAVg算法
目录 1. 联邦学习介绍 2. 实验流程 3. 数据加载 4. 模型构建 5. 数据采样函数 6. 模型训练 1. 联邦学习介绍 联邦学习是一种分布式机器学习方法,中心节点为server(服务器),各分支节点为本地的client(设备&#…...
伺服丝杠系统常用运算功能块
这篇博客主要介绍伺服、丝杠系统常用的运算功能块,其它相关运算可以查看下面文章链接: 信捷PLC脉冲频率、位移、转速相关计算(C语言编程应用)_RXXW_Dor的博客-CSDN博客里工业控制张力控制无处不在,也衍生出很多张力控制专用控制器,磁粉制动器等,本篇博客主要讨论PLC的张力…...
【Vue】模板语法,事件处理器及综合案例、自定义组件、组件通信
一、事件处理器 我们之前事件监听可以使用v-on 指令 1、事件修饰符 在Vue中我们通过由点(.)表示的指令后缀来调用修饰符,比如: .stop:阻止事件冒泡。当事件触发时,该修饰符将停止事件进一步冒泡到父元素。相当于调用了 event.stop…...
从0开始写中国象棋-创建棋盘与棋子
从控制台版本开始 考虑到象棋程序,其实就是数据结构与算法实现。 所以和界面相关的QT部分我们先放一放。 我们从控制台版本开始。这样大家更容易接受,也不影响开发。 后面我们会把控制台嫁接到QT上完成完整的游戏,那时候自然就水到渠成了…...
软件的开发步骤,需求分析,开发环境搭建,接口文档 ---苍穹外卖1
目录 项目总览 开发准备 开发步骤 角色分工 软件环境 项目介绍 产品原型 技术选型 开发环境搭建 前端:默认已有 后端 使用Git版本控制 数据库环境搭建 前后端联调 登录功能完善 导入接口文档 使用swagger 和yapi的区别 常用注解 项目总览 开发准备 开发步骤…...
Qt扫盲-QSqlQueryModel理论总结
QSqlQueryModel理论总结 一、概述二、使用1. 与 view 视图 绑定2. 分离视图,只存数据 一、概述 QSqlQueryModel是用于执行SQL语句和遍历结果集的高级接口。它构建在较低级的 QSqlQuery之上,可用于向QTableView 等视图类提供数据,也是使用了Q…...
分类预测 | MATLAB实现WOA-CNN-BiGRU-Attention数据分类预测(SE注意力机制)
分类预测 | MATLAB实现WOA-CNN-BiGRU-Attention数据分类预测(SE注意力机制) 目录 分类预测 | MATLAB实现WOA-CNN-BiGRU-Attention数据分类预测(SE注意力机制)分类效果基本描述模型描述程序设计参考资料 分类效果 基本描述 1.MATLA…...
【单调栈】496. 下一个更大元素 I
496. 下一个更大元素 I 解题思路 首先计算nums2的每一个元素的下一个比他大的元素,使用单调栈将上面的结果和nums2中的每一个元素组成映射map针对每一个Nums1的元素 查询map 记录map 的value class Solution {public int[] nextGreaterElement(int[] nums1, int[…...
搭建Vue的开发环境,Edge浏览器安装VUE拓展工具
一、在下载vue.js文件 在vue官网中下载开发版本的vue.js文件--> 安装 — Vue.js (vuejs.org) 二、将vue.js导入到项目中 这时候我们运行项目控制台会抛出两个错误 三、安装拓展工具 这里以Edge浏览器为例,其他浏览器上可在拓展管理商店中下载 进入Edge的拓展…...
14:00面试,14:06就出来了,这问的谁顶得住啊
从小厂出来,没想到在另一家公司又寄了。 到这家公司开始上班,加班是每天必不可少的,看在钱给的比较多的份上,就不太计较了。没想到8月一纸通知,所有人不准加班,加班费不仅没有了,薪资还要降40%,…...
python 探索分形世界|曼德布洛特|np.frompyfunc()
文章目录 分形的重要特征曼德布洛特集合曼德布洛特集合有一个以证明的结论:图像展示np.ogrid[]np.frompyfunc()集合转图像 julia集合 无边的奇迹源自简单规则的无限重复 ---- 分形之父Benoit B.Mandelbrot 分形的重要特征 自相似性无标度性非线性 曼德布洛特集合…...
Android MVVM示例项目
项目地址 GitHub - yaolunwei/Androidbbc at androidx 项目简介 BBC(基础业务组件) 业务组件的基础,所有业务组件必须基于该组件进行开发,提供一站式开发 快速使用 gradle: implementation com.bigoat.android:bbc:0.0.1 约定成俗 以下继承关系…...
基于ASP.NET+ SQL Server实现(Web)医院信息管理系统
医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...
大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...
Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...
UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)
UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化…...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...
华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...
九天毕昇深度学习平台 | 如何安装库?
pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子: 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...
招商蛇口 | 执笔CID,启幕低密生活新境
作为中国城市生长的力量,招商蛇口以“美好生活承载者”为使命,深耕全球111座城市,以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子,招商蛇口始终与城市发展同频共振,以建筑诠释对土地与生活的…...
