热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

WordPress主题开发教程—模版文件继承规则

如上所述, 模板文件是模块化的、可重用的文件,用于在WordPress网站上生成网页。某些模板文件(例如页眉和页脚模板)用于您网站的所有页面,而其他模板文件仅在特定条件下使用。

如上所述, 模板文件是模块化的、可重用的文件,用于在 WordPress 网站上生成网页。某些模板文件(例如页眉和页脚模板)用于您网站的所有页面,而其他模板文件仅在特定条件下使用。

本文介绍 了 WordPress 如何确定在各个页面上使用的模板文件 。如果要自定义现有的WordPress主题,这将帮助我们确定需要编辑哪个模板文件。我们还可以使用条件标签来控制在页面上加载的模板。

模板文件层次结构


摘要

WordPress 使用查询字符串来决定应该使用哪个模板来显示页面。查询字符串是包含在网站每个部分的链接中的信息。它出现在初始问号之后,可能包含许多由&符号分隔的参数。

简而言之,WordPress 向下搜索模板层次结构,直到找到匹配的模板文件。要确定要使用的模板文件,WordPress:


  1. 将每个查询字符串与查询类型匹配,来确定用户请求的是哪种类型的页面(例如,搜索页面,类别页面等);

  2. 按模板层次结构确定使用哪个模板文件来显示这个页面。

  3. 在当前主题的目录中查找具有特定名称的模板文件,并使用层次结构指定的 第一个匹配模板文件 

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

如果 WordPress 找不到名称匹配的具体模板文件,它将跳转到层次结构中的下一个文件。如果 WordPress 还是找不到任何匹配的模板文件,最终将使用index.php 模板来显示页面。

示例

举个例子,用户在你的网站上打开了分类目录存档页面:http://example.com/blog/category/your-cat/ ,WordPress 会在当前主题的目录中查找与该类别的 ID 匹配的模板文件,以生成正确的页面。更具体地说,WordPress 遵循以下过程:


  1. 在当前主题的目录中查找与分类 slug 匹配的模板文件。如果分类 slug 是“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 会在我们的网站首页显示网站的最新文章,这个页面称为文章索引。除此之外,选择一个静态页面作为网站首页。模板文件 home.php 用于显示文章索引,无论我们选择最新文章还是静态页面作为我们的首页。如果 home.php 不存在,WordPress 将使用 index.php


  1. home.php

  2. index.php

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

首页显示

front-page.php 模版文件是 WordPress 优先查找的首页模版文件,。该模版优先于 home.php模板。如果该front-page.php文件不存在,WordPress 将使用 home.php或 page.php文件,具体取决于设置→阅读中的设置。如果这两个文件都不存在,最终使用 index.php文件。



  1. front-page.php– 设置→阅读的 首页显示 中设置的“ 您的最新帖子 ”或“ 静态页面 ” 时,优先使用此模版文件 。


  2. home.php– 如果 WordPress 找不到 front-page.php,并且在 首页显示 设置了“您的最新文章”,WordPress 将查找 home.php。此外,当在首页显示部分设置文章页面时,WordPress 将查找此文件。 


  3. page.php– 在 首页显示 部分 设置“ 首页 ”时 。


  4. index.php– 首页显示 设置为“ 你最新的文章 ”,但 home.php不存在,或者设置了首页,但 page.php不存在时,使用此模版文件。

如我们上面看到的,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


单页

用于呈现静态页面的模板文件( 页面文章类型)。 页面在 WordPress 中是一个特殊的文章类型,使用以下路径来查找模版文件:



  1. 自定义模版文件– 在 WordPress 后台选择的 页面模板 。见 get_page_templates()


  2. page-{slug}.php– 如果页面 slug 是 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– 如果标签的 slug 是 sometag,WordPress 将查找 tag-sometag.php


  2. tag-{id}.php– 如果标签的ID是 6,WordPress将查找 tag-6.php

  3. tag.php

  4. archive.php

  5. index.php


自定义分类

WordPress 查找自定义分类法模板文件路径的方法稍微不同:



  1. taxonomy-{taxonomy}-{term}.php – 如果分类法是 sometax,而分类法项目是 someterm,则 WordPress 会查找 taxonomy-sometax-someterm.php.在文章格式的情况下 ,分类法是 ‘post_format’,分类法项目是 ‘post-format- {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 模板文件:


  1. 404.php

  2. index.php


附件

呈现附件页面(attachment文章类型)使用以下路径:



  1. {MIME-type}.php -可以是任何 MIME类型(例如: image.php , video.php , pdf.php )。对于 text/plain ,使用以下路径(按顺序):


    1. text-plain.php

    2. plain.php

    3. text.php



  2. attachment.php


  3. single-attachment-{slug}.php – 例如,如果附件的 slug是 holiday ,WordPress 会查找 single-attachment-holiday.php 

  4. single-attachment.php

  5. single.php

  6. singular.php

  7. index.php


嵌入功能

嵌入模板文件用于渲染嵌入到其他页面或网站的文章。从 4.5 开始,WordPress 使用以下路径:



  1. embed-{post-type}-{post_format}.php – 首先,WordPress 查找特定文章类型的模板。例如,如果一篇文章的文章类型是 post并且格式为音频格式,WordPress 会查准 embed-post-audio.php


  2. embed-{post-type}.php– 如果文章类型是 product,WordPress 会查找 embed-product.php 


  3. embed.php– 最后 WordPress 将使用 embed.php 

  4. 最后,WordPress 最终回退到内置的 wp-includes/theme-compat/embed.php模板。


非 ASCII 字符的处理方法

从 WordPress 4.7 开始,模板名称的任何动态部分(其名称中包含非 ASCII 字符)实际上都支持未编码和已编码的形式。我们可以选择使用任意一个。

下面是名为 “Hello World😀” 的页面的页面模板层次结构,其 ID 为 


  • page-hello-world-😀.php

  • page-hello-world-%f0%9f%98%80.php

  • page-6.php

  • page.php

  • singular.php

以上规则同样适用于 post slugs,term names 和 author nicenames。

过滤层次结构

WordPress 模板系统允许我们使用过滤器修改模版层次结构。这意味着我们可以在层次结构的特定点插入和更改内容。过滤器(位于 get_query_template() 函数中)使用过滤器 “{$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’ 模板过滤器来修改作者存档模版的层次结构。当用户打开 /author/username 页面时,WordPress 会自动调用角色存档模版,其中 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' );


推荐阅读
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 本文详细介绍了GetModuleFileName函数的用法,该函数可以用于获取当前模块所在的路径,方便进行文件操作和读取配置信息。文章通过示例代码和详细的解释,帮助读者理解和使用该函数。同时,还提供了相关的API函数声明和说明。 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 如何去除Win7快捷方式的箭头
    本文介绍了如何去除Win7快捷方式的箭头的方法,通过生成一个透明的ico图标并将其命名为Empty.ico,将图标复制到windows目录下,并导入注册表,即可去除箭头。这样做可以改善默认快捷方式的外观,提升桌面整洁度。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • 解决github访问慢的问题的方法集锦
    本文总结了国内用户在访问github网站时可能遇到的加载慢的问题,并提供了解决方法,其中包括修改hosts文件来加速访问。 ... [详细]
  • IOS开发之短信发送与拨打电话的方法详解
    本文详细介绍了在IOS开发中实现短信发送和拨打电话的两种方式,一种是使用系统底层发送,虽然无法自定义短信内容和返回原应用,但是简单方便;另一种是使用第三方框架发送,需要导入MessageUI头文件,并遵守MFMessageComposeViewControllerDelegate协议,可以实现自定义短信内容和返回原应用的功能。 ... [详细]
author-avatar
LD系瑰精棂_142
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有