深入解析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 相关文章推荐
php中的一个中文字符串截取函数
Feb 14 PHP
php读取csv实现csv文件下载功能
Dec 18 PHP
php读取mysql的简单实例
Jan 15 PHP
ThinkPHP缓存方法S()概述
Jun 13 PHP
PHP队列用法实例
Nov 05 PHP
PHP结合jQuery插件ajaxFileUpload实现异步上传文件实例
Aug 17 PHP
详解WordPress中给链接添加查询字符串的方法
Dec 18 PHP
PHP获取文件扩展名的方法实例总结
Jun 10 PHP
PHP实现广度优先搜索算法(BFS,Broad First Search)详解
Sep 16 PHP
PHP按符号截取字符串的指定部分的实现方法
Sep 10 PHP
php和nginx交互实例讲解
Sep 24 PHP
laravel框架使用FormRequest进行表单验证,验证异常返回JSON操作示例
Feb 18 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
先进的自动咖啡技术,真的可以取代咖啡师吗?
2021/03/06 冲泡冲煮
php学习之 认清变量的作用范围
2010/01/26 PHP
PHP curl 获取响应的状态码的方法
2014/01/13 PHP
PHP钩子实现方法解析
2019/05/21 PHP
jQuery Pagination Ajax分页插件(分页切换时无刷新与延迟)中文翻译版
2013/01/11 Javascript
jQuery焦点图切换特效插件封装实例
2013/08/18 Javascript
jQuery中focus事件用法实例
2014/12/26 Javascript
JavaScript中对DOM节点的访问、创建、修改、删除
2015/11/16 Javascript
javaScript事件学习小结(四)event的公共成员(属性和方法)
2016/06/09 Javascript
React-Native做一个文本输入框组件的实现代码
2017/08/10 Javascript
深入理解Vue生命周期、手动挂载及挂载子组件
2017/09/27 Javascript
微信小程序scroll-x失效的完美解决方法
2018/07/18 Javascript
Vue 实现展开折叠效果的示例代码
2018/08/27 Javascript
在vue项目中引入highcharts图表的方法
2019/01/21 Javascript
JQuery Ajax跨域调用和非跨域调用问题实例分析
2019/04/16 jQuery
Vue实现导航栏的显示开关控制
2019/11/01 Javascript
js+canvas实现转盘效果(两个版本)
2020/09/13 Javascript
[01:00:30]完美世界DOTA2联赛循环赛 Inki vs Matador BO2第二场 10.31
2020/11/02 DOTA
PHP webshell检查工具 python实现代码
2009/09/15 Python
Python判断值是否在list或set中的性能对比分析
2016/04/16 Python
Python快速查找list中相同部分的方法
2018/06/27 Python
python画一个玫瑰和一个爱心
2020/08/18 Python
wxPython实现带颜色的进度条
2019/11/19 Python
python取均匀不重复的随机数方式
2019/11/27 Python
完美解决TensorFlow和Keras大数据量内存溢出的问题
2020/07/03 Python
python3爬虫中异步协程的用法
2020/07/10 Python
Python实现EM算法实例代码
2020/10/04 Python
佛罗里达州印第安河新鲜水果:Hale Groves
2017/02/20 全球购物
特步官方商城:Xtep
2017/03/21 全球购物
有趣的流行文化T恤、马克杯、手机壳和更多:Look Human
2019/01/07 全球购物
Vertbaudet西班牙网上商店:婴儿服装、童装、母婴用品和儿童家具
2019/10/16 全球购物
建筑施工实习自我鉴定
2013/09/19 职场文书
土建资料员岗位职责
2014/01/04 职场文书
大学生学业生涯规划
2014/01/05 职场文书
社会学专业学生职业规划书
2014/02/07 职场文书
学校综治宣传月活动总结
2014/07/02 职场文书