`
flex_莫冲
  • 浏览: 1074843 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

[WORDPRESS系列]WordPress 模板层次详细介绍

阅读更多
参考来源:http://blog.wpjam.com/article/wordpress-template-hierarchy/

WordPress模板的定义非常方便,但是在定制模板之前,我们有必要知道WordPress的模板层次,了解WordPress是如何加载模板文件的,这将有利于开发模板时合理利用资源及提高工作效率。

万能的index.php

我们知道一个最简单的WordPress主题只需要 style.css 和 index.php 文件即可。这代表着 index.php 可以是任何一个页面的模板,无论是首页,还是文章页,或是分类页,再或者是搜索结果页面,它都能完美胜任。

也就是说,当对应的模板不存在时, index.php 将是WordPress最后的底牌。

模板加载顺序

下面让我们来了解一下WordPress都是怎么加载模板的

首页

首先WordPress会先检查是否有静态首页,如果有静态首页,就会加载这个页面内容并通过 front-page.php 模板文件展示,如果没有这个模板文件,就会通过页面模板展示
如果没有静态首页,就会加载 home.php  最新文章模板
如果没有 home.php 则加载 index.php 模板
文章页

首先被考虑的是 single-{post_type}.php 这样一个模板文件(如文章类型是 product 那么对应的文件名就是 single-product.php )
如果找不到,那么就会加载 single.php 模板
如果连 single.php 模板都没有则加载 index.php 模板。
页面

首先被考虑的是自定义模板,也就是编辑页面时所选择的模板
如果没有自定义模板,则查找 page-{slug}.php 别名模板(如页面别名是 about 对应的文件名就是 page-about.php )
如果别名模板也没有就查找 page-{id}.php ID模板(如页面ID是 2 对应的文件名就是 page-2.php )
如果ID模板也没有那就是 page.php 模板了
如果连 page.php 模板都没有则加载 index.php 模板
分类页

首先被考虑的是 category-{slug}.php 别名模板(如分类别名是 news 对应的文件名就是 category-news.php )
如果没有别名模板则查找 category-{id}.php ID模板(如分类ID是 1 对应的文件名就是 category-1.php )
如果ID模板也没有那就是 category.php 分类模板了
如果 category.php 分类模板也没有则加载 archive.php 通用归档模板
如果连 archive.php 通用归档模板都没有则加载 index.php 模板
标签页

标签页模板加载顺序和分类页一样,只不过前缀不过 category 而是 tag (如 tag-{slug}.php)。

自定义分类法

有时候除了WordPress默认的分类目录和标签我们还需要其他的分类方法,这时候我们就会注册一个新的分类法,那么在此之前知道分类法的模板加载顺序也是十分必要的。以下说明假设自定义分类法是 people 这个名字:

分类法分类页首先被考虑的是 taxonomy-{taxonomy}-{term}.php 别名模板(如分类别名 teacher 对应的文件名就是 taxonomy-people-teacher.php )
如果没有别名模板,则加载该分类法归档页(如 taxonomy-people.php )
如果分类法归档页模板也没有则加载 archive.php 通用归档模板
如果连 archive.php 通用归档模板都没有则加载 index.php 模板
自定义文章类型

除了自定义分类法,有时候我们也需要自定义文章类型:

自定义文章类型归档页首先被考虑的是 archive-{post_type}.php 别名模板(如文章类型是 product 那么对应的文件名就是 archive-product.php )
如果没有别名模板则加载 archive.php 通用归档模板
如果连 archive.php 通用归档模板都没有则加载 index.php 模板
作者归档页

首先被考虑的是 author-{nicename}.php 别名模板(如作者用户名是 steven 那么对应的文件名就是 author-steven.php )
如果没有别名模板则加载 author-{id}.php ID模板(如作者ID是 1 对应的文件名就是 author-1.php )
如果ID模板没有则加载 author.php 通用作者模板
如果通用作者模板也没有则加载 archive.php 通用归档模板
如果连 archive.php 通用归档模板都没有则加载 index.php 模板
日期归档页

首先被考虑的是 date.php 日期归档模板
如果日期归档模板没有则加载 archive.php 通用归档模板
如果连 archive.php 通用归档模板都没有则加载 index.php 模板
搜索结果页

首先被考虑的是 search.php 搜索结果模板
如果没有搜索结果模板则加载 index.php 模板
附件页

首先会按MIME类型加载模板(如 image.php, video.php, application.php,而 text/plain 类型则按顺序尝试加载 text.php, plain.php, text_plain.php 这三个文件。
如果没有对应的MIME类型模板则 attachment.php 附件模板(如没有 attachment.php 则加载 single-attachment.php )
如果没有附件模板则加载 single.php 文章页模板
如果连 single.php 文章页模板都没有则加载 index.php 模板
模板层次图

上面用文字详细讲述了WordPress模板的加载顺序,尽管详细,但还不如一张信息图更为直观,以下就是WordPress的模板层次结构图。

WordPress模板层次图

使用钩子修改模板

在某些使用场景(如插件),我们并不能直接修改模板文件,这时候我们可以使用钩子来实现修改模板文件,钩子名称是 {$type}_template 这样的格式,以下是对应的完整的钩子名称列表:

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
以下是一个使用例子(让页面加载 single.php 文章页的模板):

function page_template_filter( $templates='' ){
$templates=locate_template("single.php",false);
return $templates;
}
add_filter( 'page_template', 'page_template_filter' );
模板页面判断

一般情况下,在一个特定的模板中我们能清楚知道应该怎么输出特定的样式和内容,但在一些通用模板中(如 header.php )我们想要知道用户当前访问的是哪个页面模板就需要借助WordPress内置的条件判断函数了,这些函数可以帮助我们判断当前是什么页面以方便加载不同的模板内容,如 is_home() 则是判断首页的条件标签,is_single() 则是判断文章页的条件标签,等等。

原文链接:http://www.dmeng.net/wordpress-template-hierarchy.html
分享到:
评论

相关推荐

    wphierarchy, WordPress模板层次结构资源.zip

    wphierarchy, WordPress模板层次结构资源 WordPress模板层次结构描述wphierarchy.com 是对WordPress主题模板层次结构的一个可视化。官方文件位于: https://developer.wordpress.org/themes/basics/tem

    层次结构:体现WordPress模板层次结构的无依赖软件包

    层次结构层次结构是旨在用PHP对象表示WordPress模板层次结构的软件包。目录什么为什么? 每个WP开发人员都知道,对于每个前端请求,WordPress都会运行查询,然后根据查询加载模板文件。 模板的选择是根据定义的规则...

    No.7_qzhai.zip

    wordpress模板极简主题。...WordPress模板的定义非常方便,但是在定制模板之前,我们有必要知道WordPress的模板层次,了解WordPress是如何加载模板文件的,这将有利于开发模板时合理利用资源及提高工作效率。

    Mesjid-WPMWA:with具有PWA的简单Wordpress主题

    WordPress基本模板层次结构 基本PWA | 渐进式Web应用| 包括离线和缓存管理 特征 审计 带有Web服务器优化软件的Server Centos 7 PHP5.6 Apache 提供 初次审核 第二次审核 预览主题 笔记本电脑屏幕 手机横屏 手机...

    详解WordPress中调用评论模板和循环输出评论的PHP函数

    comments_template comments_template 函数是一个调用评论模板的函数,使用起来很简单,与get_header()等函数一样,是一个include文件类函数,今天来讲一下他的使用。...讲的比较笼统,更深层次请往下看 使用实例

    swiper框架滚轴视觉体验创新WEB主题公园体验至上WordPress主题模板

    WEB主题公园所出品的付费WordPress主题都有完善的售后服务,我们提供详细的一步一步从零到完成的视频教程提供给你参考,主题的设计文档(psd)以及素材图片都有完整提供。并在你使用主题时遇到的任何麻烦和问题,都...

    滚轴视觉体验创新WEB主题公园体验至上WordPress主题模板

    这款wordpress主题我们使用了swiper框架,swiper是专为IOS和安卓设计的动效平滑框架,能够让你在手机和平板电脑上非常流畅的运行他的动画。 而我们采用代码适配的方式,在pc版本上使用javascript动画,而在手机和...

    Wordpress-Theme-Development:博客的自定义Wordpress主题

    WordPress主题开发 这是使用WordPress和PHP的博客的自定义主题。 特征 ...WordPress的模板层次结构 while循环 工具 WordPress的 PHP Git,Github 字体很棒 XAMPP 当地的 联系表格7(WordPress插件)

    在线考试系统(完整版sql server2000+.net)

    下面对这几层进行介绍。 1、表示层,它负责响应用户的请求,对于这一层一般代码量很少。大量的处理工作交给其他的层完成。 2、业务逻辑层,用来对数据进行有效性验证,牵涉到对敏感数据的操作都需要经过业务逻辑层做...

    wp-theme-montheme

    // version参数对于避免缓存很重要筛选器允许更改值带扣模板层次结构 taxonomy-sport.php:用于管理与体育相关的分类法显示的模板文件archive-bien.php:bien类型帖子的模板文件图片格式我们安装了“重新生成缩略图...

Global site tag (gtag.js) - Google Analytics