深入解析WordPress中加载模板的get_template_part函数


Posted in PHP onJanuary 11, 2016

最近研究官方主题 Twenty Eleven ,有一些东西网上现成的中文资料不好找,在博客里记载下来,算是分享,也算是备忘,wordpress 3.0 以后就开始便有了get_template_part() 这个函数 ,应该是为文章呈现形式提供更为多样化的选择而给出的新功能。

Twenty Eleven 中 实例如下:

Twenty Eleven index.php 文件
 行:21

<?php if ( have_posts() ) : ?>
 <?php twentyeleven_content_nav( 'nav-above' ); ?>
 <?php /* Start the Loop 在循环中使用以调用不同类型的文章 */ ?>
 <?php while ( have_posts() ) : the_post(); ?>
 <?php get_template_part( 'content', get_post_format() ); ?>
 <?php endwhile; ?>
............................
<?php endif; ?>

描述:
加载一个制定的模板到另一个模板里面(不同于包含header,sidebar,footer).
使得一个主题使用子模板来实现代码段重用变得简单

用于在模板中包含指定的模板文件,只需用指定参数slug和name就可以包含文件{slug}-{name}.php,最重要的功能是如果没有这个文件就包含没有{name}的.php文件文件

使用方法:

<?php get_template_part( $slug, $name ) ?>

参数:

  • $slug (必须) 通用的模板名
  • $name (可选) 指定的模板名

示例:

使用 loop.php 在子主题里面

假设主题文件夹wp-content/themes下父主题是twentyten子主题twentytenchild,那么下面的代码:

<?php get_template_part( 'loop', 'index' ); ?>

php 的require()函数将按下面优先级包含文件

1. wp-content/themes/twentytenchild/loop-index.php
2. wp-content/themes/twentytenchild/loop.php
3. wp-content/themes/twentyten/loop-index.php
4. wp-content/themes/twentyten/loop.php

导航(这个例子很烂,但却是另一种使用思路)
使用通用的nav.php文件给主题添加导航条:

<?php get_template_part( 'nav' );      // Navigation bar (nav.php) ?>
<?php get_template_part( 'nav', '2' );   // Navigation bar #2 (nav-2.php) ?>
<?php get_template_part( 'nav', 'single' ); // Navigation bar to use in single pages (nav-single.php) ?>

get_template_part() 的钩子详解
因为在官方主题(Twenty Eleven)中 get_template_part() 函数被大量使用,所以就目前来看,该函数应该算是比较热门的一个函数了,之前有写过一篇文章讲述该函数的具体使用方法,在这里也就不便再赘述,本文主要针对该函数的 add_action 中的 hook $tag 值进行探讨,因为,WP hook 中林林总总有那么些函数在$tag 值中比较让人费解。

与普通hook的区别
普通的hook的$tag 是一个固定值,而 get_template_part() 确是一个可变值,好吧先不说,wp这么做给我们实现一个简单功能带来多少麻烦,但如此设置确实给多样化的主题实现带来了不少方便之处。
实现这一原理的源代码如下,截取自 WordPress 源程序。

function get_template_part( $slug, $name = null ) {
//$tag = "get_template_part_{$slug}" 
//也就是,get_template_part_+你当时设置的$slug值
 do_action( "get_template_part_{$slug}", $slug, $name );
 $templates = array();
 if ( isset($name) )
  $templates[] = "{$slug}-{$name}.php";
  $templates[] = "{$slug}.php";
  locate_template($templates, true, false);
}

实例
像上面那样说,可能也许基本上有点看不明白,好吧给点实例

 

//复习一下get_template_part($slug, $name)的用法,
//如果你在主题里这样
get_template_part( 'index' , 'photo');
//那么 WP 会去找主题根目录下 index-photo.php 文件
 
//那么我们想挂一个函数的话就得像如下
function addFunction ($slug, $name){
echo $slug;
}
add_action("get_template_part_index","addFunction",10,2);

get_template_part() 函数详解备忘

PHP 相关文章推荐
php4的彩蛋
Oct 09 PHP
POSIX 风格和兼容 Perl 风格两种正则表达式主要函数的类比(preg_match, preg_replace, ereg, ereg_replace)
Oct 12 PHP
浅析PHP页面局部刷新功能的实现小结
Jun 21 PHP
php上传图片到指定位置路径保存到数据库的具体实现
Dec 30 PHP
PHP开发框架Laravel数据库操作方法总结
Sep 03 PHP
php找出指定范围内回文数且平方根也是回文数的方法
Mar 23 PHP
PHP实现一个简单url路由功能实例
Nov 05 PHP
php中的单引号、双引号和转义字符详解
Feb 16 PHP
laravel自定义分页效果
Jul 23 PHP
使用PHP连接数据库_实现用户数据的增删改查的整体操作示例
Sep 01 PHP
PHP长连接实现与使用方法详解
Feb 11 PHP
PHP常量及变量区别原理详解
Aug 14 PHP
PHP实现基于文本的摩斯电码生成器
Jan 11 #PHP
简单了解WordPress开发中update_option()函数的用法
Jan 11 #PHP
WordPress后台中实现图片上传功能的实例讲解
Jan 11 #PHP
在WordPress的后台中添加顶级菜单和子菜单的函数详解
Jan 11 #PHP
在WordPress中获取数据库字段内容和添加主题设置菜单
Jan 11 #PHP
[原创]PHP简单开启curl的方法(测试可行)
Jan 11 #PHP
详解YII关联查询
Jan 10 #PHP
You might like
ajax缓存问题解决途径
2006/12/06 PHP
php小偷相关截取函数备忘
2010/11/28 PHP
YII实现分页的方法
2014/07/09 PHP
如何简单地用YUI做JavaScript动画
2007/03/10 Javascript
js 纯数字不重复排列的另类方法
2010/07/17 Javascript
纯CSS打造的导航菜单(附jquery版)
2010/08/07 Javascript
jquery基础教程之数组使用详解
2014/03/10 Javascript
网站繁简切换的JS遇到页面卡死的解决方法
2014/03/12 Javascript
JS获取单击按钮单元格所在行的信息
2014/06/17 Javascript
javascript实现日期格式转换
2014/12/16 Javascript
mvc 、bootstrap 结合分布式图简单实现分页
2016/10/10 Javascript
node.js基于express使用websocket的方法
2017/11/09 Javascript
JavaScript键盘事件常见用法实例分析
2019/01/03 Javascript
JavaScript将数组转换为链表的方法
2020/02/16 Javascript
小程序自动化测试的示例代码
2020/08/11 Javascript
鸿蒙系统中的 JS 开发框架
2020/09/18 Javascript
[54:15]DOTA2-DPC中国联赛 正赛 DLG vs Dragon BO3 第二场2月1日
2021/03/11 DOTA
Python连接mysql数据库的正确姿势
2016/02/03 Python
详谈Python基础之内置函数和递归
2017/06/21 Python
Python中用psycopg2模块操作PostgreSQL方法
2017/11/28 Python
解决python使用open打开文件中文乱码的问题
2017/12/29 Python
Python画柱状统计图操作示例【基于matplotlib库】
2018/07/04 Python
python打印直角三角形与等腰三角形实例代码
2019/10/20 Python
怎么快速自学python
2020/06/22 Python
食堂员工工作职责
2013/12/18 职场文书
2014年学习雷锋活动总结
2014/03/01 职场文书
初一新生军训方案
2014/05/22 职场文书
竞聘演讲稿开场白
2014/08/25 职场文书
教师节随笔
2015/08/15 职场文书
电力培训学习心得体会
2016/01/11 职场文书
2016年大学光棍节活动总结
2016/04/05 职场文书
React中的Context应用场景分析
2021/06/11 Javascript
《异世界四重奏》剧场版6月10日上映 PV视觉图原创角色发表
2022/03/20 日漫
《黑岩★★射手 DAWN FALL》BD发售宣传CM公开
2022/04/04 日漫
Python如何用re模块实现简易tokenizer
2022/05/02 Python
MySQL中JOIN连接的基本用法实例
2022/06/05 MySQL