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

wordpress模板层次

简介WordPress模板像拼图一样拼在一起,来生成你网站的页面。有些模板,比如页眉和页脚,是所有页面公用的;也有的只在一些特定页面/情况中使用。这篇文章是关于:这篇文章回答了下面这些问题:WordPress生成特定页面的时候调用了什么模板文件?这篇文章可能对谁有用:自从WordPress引入主

简介

WordPress模板像拼图一样拼在一起,来生成你网站的页面。有些模板,比如页眉和页脚,是所有页面公用的;也有的只在一些特定页面/情况中使用。

这篇文章是关于:

这篇文章回答了下面这些问题:

WordPress生成特定页面的时候调用了什么模板文件?

这篇文章可能对谁有用:

自从WordPress引入主题以来,模板的可配置性越来越高,为了开发WordPress主题,你有必要了解WordPress是如何为不同页面选择模板文件的。如果你希望自定义一个现有的主题,这篇文章将告诉你需要修改那些模板文件。

使用条件标签函数判断

WordPress 提供多种将查询匹配到模板的方式。主题开发者也可以使用条件标签来控制特定页面的模板使用。有些Wordpress主题可能并未实现这里提到的所有功能。有些主题则使用条件标签来载入其他模板文件。参见条件标签页面和"基于查询"的主题开发。

模版文件的分层结构

基本理念

WordPress使用查询字符串——你网站中每个链接所包含的信息,来决定使用哪个或哪些模板文件。

首先,wordpress匹配所有的查询字符串来查询类型 — 例如它决定何种类型的页面 (搜索页面,分类页面,首页等等)被请求.

然后相应的模板被选择 — web页面内容生成 — 通过WordPress模板层次指定顺序, 判断特定的WordPress主题中的模板文件.

WordPress通过当前主题目录中的特定名字查找模板文件并且使用当前查询条件匹配列出的第一个模板文件.

如果index.php?模板文件出现例外, 主题开发者可以自由选择他们想要实现的特定模板文件.如果WordPress不能找到匹配的模板文件, 它将会跳到当前层级的下一个文件名. 如果WordPress找不到任何匹配的模板文件,index.php?(主题首页模板文件)将会被默认使用.

举例

如果你的博客网址是?http://example.com/blog/?,有一个访客点击了其中一个分类的链接:http://example.com/blog/category/your-cat/: WordPress将按照如下方式寻找模板文件并生成页面。

WordPress在当前主题目录下寻找一个匹配当前文章分类ID的模板文件。

  1. 如果文章分类ID是4, WordPress会找这样一个文件:?category-4.php.
  2. 如果没有这个文件, WordPress再找通用的文章分类模板,?category.php.
  3. 如果这也没有, WordPress再找通用文章归档模板,?archive.php.
  4. 如果还没有, WordPress回到主题主模板文件,?index.php.

如果访客访问了你的首页:?http://example.com/blog/:

  1. WordPress首先看是否有?静态首页. 如果有,则根据?模板层次载入那个页面.
  2. 如果没有静态首页,则去到?home.php?,用它来生成请求的页面。
  3. 如果?home.php?也没有, 再回到当前主题目录下的index.php?文件,用它来生成页面。

概览

下面的图表显示基于WordPress模板层级哪一个模板文件将会被调用来生成一个WordPress页面.

wordpress模板层级

模板层次细节

下面的章节描述了通过WordPress的查询类型模板文件被调用的顺序.

首页显示

用来渲染博客文章首页的模板文件, 无论是站点首页还是静态页面.注意 : 在站点首页, 首页模板优先于博客文章Index模板.

  1. front-page.php?- 用于最新文章或者静态页面在设置?->?阅读章节的首页显示
  2. 页面显示规则?- 当设置?->?阅读章节中的首页显示的首页被设置时有效
  3. 首页显示规则?- 当设置?->?阅读中首页显示的发布文章被设置时有效

文章页面显示

用于渲染单个文章页面的模板文件

  1. single-{post_type}.php?- 如果文章类型?是product的话, WordPress将会查找single-product.php.
  2. single.php
  3. index.php

页面显示

渲染静态页面的模板文件(page?post-type)

  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. index.php

分类显示

用于渲染一个分类归档页面的模板文件

  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

标签显示

用于显示标签归档页面的模板文件

  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' 且类别是 '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?- 如果作者昵称是rami, WordPress 将会查找?author-rami.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?post-type)页面的模板文件

  1. MIME_type.php?- 可以是任意MIME类型?(image.php,?video.php,?application.php). For?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

过滤层级

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

举例

例如,让我们使用默认的作者层级:

  • author-{nicename}.php
  • author-{id}.php
  • author.php

为了将author-{role}.php添加到author.php之前我们可以操作实际层级使用?'author_template' 钩子. This allows a request for /author/username where username has the role of editor to display using author-editor.php if present in the current themes directory.

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' );

源文件

  • 模板层级函数定义在?wp-includes/theme.php中.
  • 模板加载层级定义在?wp-includes/template-loader.php中.

推荐阅读
  • 致信息安全爱好者的成长指南
    本文旨在为信息安全爱好者提供一份详尽的成长指南,涵盖从学习心态调整到具体技能提升的各个方面。 ... [详细]
  • 本文详细介绍了C++中常见的容器(如列表、向量、双端队列等)及其迭代器的实现方式,通过具体代码示例展示了如何使用这些容器和迭代器。 ... [详细]
  • 本文探讨了在执行SQL查询时遇到的因字符集不同而导致查询结果差异的问题,特别是涉及中文字符时。文章分析了在不同字符集设置下,SQL查询结果的变化,并提供了详细的解决方案。 ... [详细]
  • 探讨在数据库中存储URL时,删除尾部斜杠的安全性和潜在影响,以及如何确保URL的一致性。 ... [详细]
  • 本文探讨了如何在JavaScript中调用PHP函数及实现两者之间的有效交互,包括通过AJAX请求、动态生成JavaScript代码等方法。 ... [详细]
  • CGroups: 资源管理和控制
    CGroups(Control Groups)是Linux内核提供的一个功能,旨在限制、记录和隔离进程组使用的物理资源,如CPU、内存和I/O等。它通过精细的资源管理,支持现代容器技术如Docker的资源限制需求。 ... [详细]
  • Kafka 示例项目中 Log4j 的配置与调试
    本文详细介绍了如何在 Kafka 源码中的示例项目配置 Log4j,以确保能够正确记录日志信息,帮助开发者更好地理解和调试代码。 ... [详细]
  • 本文介绍如何利用Python中的Epoll机制构建一个高效的Web服务器,该服务器能够处理多个并发连接,并向每个连接的客户端返回预定义的响应文本。通过使用Epoll,服务器可以实现高性能的I/O多路复用。 ... [详细]
  • 多版本CUDA共存与即时切换方案
    本文探讨了在同一台机器上安装并管理多个CUDA版本的方法,以适应不同软件或项目的需求。特别是在使用旧版PyTorch等依赖特定CUDA版本的软件时,该方法尤为实用。 ... [详细]
  • Django框架的使用教程mysql数据库[三]
    Django的数据库1.在Django_test下的view.py里面model定义模型fromdjango.dbimportmodels#Createyourmodelshere ... [详细]
  • Elasticsearch基础操作指南:使用Postman进行数据管理
    本文将介绍如何利用Postman工具执行基本的日志写入和数据管理操作。通过本教程,您将了解如何连接至Elasticsearch服务,创建索引,存储及检索数据。 ... [详细]
  • 本文探讨了为何采用RESTful架构及其优势,特别是在现代Web应用开发中的重要性。通过前后端分离和统一接口设计,RESTful API能够提高开发效率,支持多种客户端,并简化维护。 ... [详细]
  • 本文详细探讨了在Windows Server 2003环境下遇到MySQL连接失败(错误代码10061)的解决方案,包括通过卸载特定的Windows更新和调整系统注册表设置的方法。 ... [详细]
  • 使用Adobe Illustrator打造独特的家族徽章:牡鹿图腾设计教程
    本文详细介绍了一种基于《权力的游戏》灵感,运用Adobe Illustrator创作独特家族图腾——牡鹿徽章的方法。本教程不仅展示了具体的步骤,还提供了多种技巧,帮助读者创作出既具个人特色又符合设计原则的作品。 ... [详细]
  • mysql 分库分表策略_【数据库】分库分表策略
    关系型数据库本身比较容易成为系统瓶颈,单机存储容量、连接数、处理能力都有限。当单表的数据量达到1000W或100G以后,由于查询维度较多, ... [详细]
author-avatar
日本化妆品专卖_703
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有