热门标签 | 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中.

推荐阅读
  • 使用Python在SAE上开发新浪微博应用的初步探索
    最近重新审视了新浪云平台(SAE)提供的服务,发现其已支持Python开发。本文将详细介绍如何利用Django框架构建一个简单的新浪微博应用,并分享开发过程中的关键步骤。 ... [详细]
  • This guide provides a comprehensive step-by-step approach to successfully installing the MongoDB PHP driver on XAMPP for macOS, ensuring a smooth and efficient setup process. ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 本文详细分析了Hive在启动过程中遇到的权限拒绝错误,并提供了多种解决方案,包括调整文件权限、用户组设置以及环境变量配置等。 ... [详细]
  • 本文介绍了如何使用PHP代码实现微信平台的媒体素材上传功能,详细解释了API接口的使用方法和注意事项,确保文件路径正确以避免常见的错误。 ... [详细]
  • 在即将迎来26岁生日之际,作者的人生陷入了低谷。经过近三年的硕士学习后,最终决定退学,并且面临没有工作经验的困境。尽管如此,作者依然坚定地选择为自己的人生负责。 ... [详细]
  • Hadoop入门与核心组件详解
    本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ... [详细]
  • 深入探讨CPU虚拟化与KVM内存管理
    本文详细介绍了现代服务器架构中的CPU虚拟化技术,包括SMP、NUMA和MPP三种多处理器结构,并深入探讨了KVM的内存虚拟化机制。通过对比不同架构的特点和应用场景,帮助读者理解如何选择最适合的架构以优化性能。 ... [详细]
  • 解决JAX-WS动态客户端工厂弃用问题并迁移到XFire
    在处理Java项目中的JAR包冲突时,我们遇到了JaxWsDynamicClientFactory被弃用的问题,并成功将其迁移到org.codehaus.xfire.client。本文详细介绍了这一过程及解决方案。 ... [详细]
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社区 版权所有