WordPress主题开发( 七)之—— 模版文件继承规则

news2024/11/24 14:27:34

WordPress主题开发( 七)之—— 模版文件继承规则

    • 概述
    • 模板文件层次结构
    • 示例
    • 可视化概述
    • 层次结构详细信息
      • 主页显示
      • 首页显示
      • 单文章页面
      • 单页
      • 分类目录
      • 标签
      • 自定义分类
      • 自定义文章类型
      • 作者显示
      • 日期
      • 搜索结果
      • 404(未找到)
      • 附件
      • 嵌入功能
      • 非ASCII字符的处理方法
      • 过滤层次结构
      • 示例

概述

WordPress模板文件是用于生成网页的模块化、可重用的文件。不同的模板文件用于不同的页面或页面类型。了解WordPress如何确定使用哪个模板文件对于自定义主题和网站开发非常重要。本文将介绍WordPress的模板文件继承规则,帮助您确定在不同情况下使用哪个模板文件,并控制页面的外观和布局。

模板文件层次结构

WordPress使用查询字符串来决定应该使用哪个模板文件来显示页面。查询字符串包含在网站链接的URL中,出现在初始问号之后,并可能包含多个由“&”符号分隔的参数。

简而言之,WordPress会按照以下步骤来确定要使用的模板文件:

  1. 匹配查询类型:WordPress将根据查询字符串中的信息确定用户请求的页面类型(例如,搜索页面、分类页面等)。

  2. 确定模板文件:WordPress会按照模板文件的层次结构来确定要使用的模板文件。

WordPress会在当前主题的目录中查找特定名称的模板文件,并使用层次结构中最先匹配的模板文件。

除了基本的index.php模板文件之外,您可以自定义使用其他模板文件来显示页面。

如果WordPress找不到具有与查询匹配的模板文件,它将继续查找层次结构中的下一个文件。如果WordPress仍然找不到匹配的模板文件,最终将使用index.php模板来显示页面。

示例

让我们通过一个示例来说明这个过程。假设用户访问您的网站上的分类目录存档页面:http://example.com/blog/category/your-cat/。WordPress会按照以下过程来确定要使用的模板文件:

  1. 在当前主题的目录中查找与分类别名匹配的模板文件。如果分类别名是“unicorns”,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使用home.php模板文件来显示文章索引,无论您选择最新文章还是静态页面作为首页。如果home.php不存在,WordPress将回退到使用index.php

  • home.php
  • index.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.php
    • plain.php
    • text.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-😀.php
  • page-hello-world-%f0%9f%98%80.php
  • page-6.php
  • page.php
  • singular.php

这些规则同样适用于文章别名、术语名称和作者名字。

过滤层次结构

WordPress模板系统允许您使用过滤器来修改模板层次结构。这意味着您可以在层次结构的特定点插入和更改内容。过滤器位于get_query_template()函数中,使用过滤器“{KaTeX parse error: Expected 'EOF', got '}' at position 5: type}̲_template”,其中type是模板类型。

以下是模板层次结构中所有可用过滤器的列表:

  • embed_template
  • 404_template
  • search_template
  • frontpage_template
  • home_template
  • taxonomy_template
  • attachment_template
  • single_template
  • page_template
  • singular_template
  • category_template
  • tag_template
  • author_template
  • date_template
  • archive_template
  • index_template

您可以使用这些过滤器修改模板文件的调用顺序,以实现更高度的定制。

示例

例如,默认的作者存档模板层次结构如下:

  • author-{nicename}.php
  • author-{id}.php
  • author.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龙哥,祝你开放不迷路

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1043330.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微PE辅助VMware安装操作系统

文章目录 一、微PE工具下载和安装二、下载系统镜像1.方式一2.方式二 三、安装VMware虚拟机三、使用U盘安装系统1.磁盘分区2.安装操作系统 一、微PE工具下载和安装 微PE工具箱下载地址点我 注意:EFI盘不要动任何文件,而我们自己的U盘就可以当作日常普通…

03 MIT线性代数-矩阵乘法和逆矩阵Multiplication inverse matrices

1. 矩阵乘法 Matrix multiplication 我们通过四种方法讨论如何使矩阵A与B相乘得到矩阵C。其中A为mxn(m行n列)矩阵,而B为nxp矩阵,则C为mxp矩阵,记cij为矩阵C中第i行第j列的元素 1.1 Regular way 矩阵乘法的标准计算方…

Azure AD混合部署,通过 Intune 管理设备,实现条件访问

一、设备同步到AAD上面 1、配置 AAD Connect 2、选择 3、下一步 4、配置本地 企业管理员 5、配置成功 二、通过 组策略把设备同步到 Intune 上面 1、创建一条组策略 2、设置 (1)计算机配置 → 管理模板 → Windows 组件 → MDM → 使用默认 Azure AD …

WSL2编译安卓11源码,,刷入pixel设备,并使用asfp查看源码

目录 WSL2编译安卓11源码,,刷入pixel设备源码下载驱动下载编译刷机源码导入Android Studio for platformADB调试 WSL2编译安卓11源码,,刷入pixel设备 aosp编译完成后,刷入手机其实非常简单,但是使用wsl有一个问题,就是…

绝缘子主要尺寸

声明 本文是学习GB-T 1000-2016 高压线路针式瓷绝缘子尺寸与特性. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了高压线路针式瓷绝缘子的结构型式、尺寸、机械特性和电气特性。 本标准适用于标称电压为10 kV 及以下、频率不高于…

【Unity的 Built-in 渲染管线下实现好用的GUI模糊效果_Blur_案例分享(内附源码)】

CGPROGRAM实现好用的GUI模糊效果 实现Blur模糊方式1C#代码如下方式1_Shader代码如下实现Blur模糊方式2方式2_Shader如下实现Blur模糊方式1 其他的模糊效果,在这一篇。 效果如图: 新建一个C#文件,命名为"CommandBlur",打开C#,删除内容,复制粘贴下面的代码:…

TikTok的伦理挑战:虚拟世界与现实世界的交汇

在数字时代,社交媒体平台已经不再只是一个信息传播的工具,它已经深刻地改变了我们的社交行为、价值观和伦理观。 而在这一领域的佼佼者之一,TikTok,正面临着伦理挑战,这是虚拟世界与现实世界交汇的产物。 本文将深入…

GitLab多人开发步骤

目录 一、基于develop创建自己的feature分支二、提交代码格式简易版 三、提交到远程仓库四、提交合并请求 一、基于develop创建自己的feature分支 使用git checkout切换到develop分支 git checkout develop 基于develop分支创建feature分支 格式: git checkout -b …

字符集、IO流(一)

字符集、IO流(一) 各位同学,前面我们已经学习了File类,通过File类的对象可以对文件进行操作,但是不能操作文件中的内容。要想操作文件中的内容,我们还得学习IO流。但是在正式学习IO流之前,我们还需要学习一个前置知识叫做字符集,只有我们把字符集搞明白了,再学习IO流…

全新UI基于Thinkphp的最新自助打印系统/云打印小程序源码/附教程

这是一款全新的基于Thinkphp的最新自助打印系统,最新UI界面设计的云打印小程序源码,带有简单的教程。 下载地址:https://bbs.csdn.net/topics/617324130

SM5101 SOP-8 充电+触摸+发执丝控制多合一IC触摸打火机专用IC

SM5101 SOP-8 充电触摸发执丝控制多合一IC触摸打火机专用IC,具电池过充过放 触摸控制 发热丝电流控制多功能为一体专用芯片。 简介: SM5101是一款针对电子点烟器的专用芯片,具有完整的充电功能和完善的电池保护功能,还具有触摸控…

复杂SQL解析

文章目录 背景表SQL关键字分析具体Sql注意点补充:select的字段,也可以带有计算逻辑 背景表 1、sale_log as result: 主表,大部分字段都是取自这个表 2、sale_num as sale:需要从这个表获取真实销量sale_num字段 3、schedule as…

机器学习算法基础--K-means聚类方法

目录 1.算法原理介绍 2.算法核心代码 3.算法效果展示 1.算法原理介绍 #k-means聚类方法 """ k-means聚类算法流程: 1.K-mean均值聚类的方法就是先随机选择k个对象作为初始聚类中心. 2.这个时候你去计算剩余的对象于哪一个聚类中心的距离是最小的,优先分配给最…

Springcloud:二、Eureka介绍+上手(搭建EurekaServer注册中心+服务注册+服务拉取)

Eureka介绍 Eureka上手 搭建EurekaServer注册中心 在cloud-demo这个maven项目下创建eureka-server模块 引入依赖 在eureka-server模块的pom文件中新增如下代码 <dependencies><dependency><groupId>org.springframework.cloud</groupId><artif…

基于PYQT5的GUI开发系列教程【二】框架安装和基础环境配置

本文概述 PYQT5是一个基于python的可视化GUI开发框架&#xff0c;具有容易上手&#xff0c;界面美观&#xff0c;多平台部署等优点&#xff0c;作者将通过一系列教程&#xff0c;带领大家从零基础到入门~能够自主实现GUI开发。 作者介绍 作者本人是一名人工智能炼丹师&#xff…

从0开始写中国象棋-创建棋盘与棋子

从控制台版本开始 考虑到象棋程序&#xff0c;其实就是数据结构与算法实现。 所以和界面相关的QT部分我们先放一放。 我们从控制台版本开始。这样大家更容易接受&#xff0c;也不影响开发。 后面我们会把控制台嫁接到QT上完成完整的游戏&#xff0c;那时候自然就水到渠成了…

GPT4科研实践技术与AI绘图

GPT对于每个科研人员已经成为不可或缺的辅助工具&#xff0c;不同的研究领域和项目具有不同的需求。如在科研编程、绘图领域&#xff1a;1、编程建议和示例代码: 无论你使用的编程语言是Python、R、MATLAB还是其他语言&#xff0c;都可以为你提供相关的代码示例。2、数据可视化…

【计算机网络】IP协议(上)

文章目录 TCP与 IP之间的关系IP地址的认识协议报头格式1. 报头和有效载荷如何分离&#xff1f;2. 8位协议3. 4位版本4. 8位服务类型5. 16位总长度6. 8位生存时间 TTL 网段划分IP地址的划分 子网划分CIDR的提出如何理解CIDR TCP与 IP之间的关系 如&#xff1a;假设 你上高中时&…

RK3568平台开发系列讲解(工具命令篇)MobaXterm 软件安装及使用

&#x1f680;返回专栏总目录 文章目录 一、MobaXterm 软件下载二、MobaXterm 软件安装三、MobaXterm 软件使用3.2、ssh 连接 沉淀、分享、成长&#xff0c;让自己和他人都能有所收获&#xff01;&#x1f604; 一、MobaXterm 软件下载 MobaXterm 是一款多功能远程终端软件&…

Linux学习第20天:Linux按键输入驱动开发: 大道至简 量入为出

Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 中国文化博大精深&#xff0c;太极八卦&#xff0c;阴阳交合&#xff0c;变化无穷。在程序的开发中也是这样&#xff0c;数字0和1也是同样的道理。就本节来说&am…