深入解析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 相关文章推荐
跟我学小偷程序之成功偷取首页(第三天)
Oct 09 PHP
PHP array_multisort() 函数的深入解析
Jun 20 PHP
php中in_array函数用法探究
Nov 25 PHP
在SAE上搭建最新wordpress的方法
Dec 21 PHP
php 使用array函数实现分页
Feb 13 PHP
php使用pear_smtp发送邮件
Apr 15 PHP
PHP + plupload.js实现多图上传并显示进度条加删除实例代码
Mar 06 PHP
PHP 断点续传实例详解
Nov 11 PHP
PHP微信开发之微信录音临时转永久存储
Jan 26 PHP
PHP判断访客是否手机端(移动端浏览器)访问的方法总结【4种方法】
Mar 27 PHP
Laravel 读取 config 下的数据方法
Oct 13 PHP
TP3.2.3框架文件上传操作实例详解
Jan 23 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
php实现的支持imagemagick及gd库两种处理的缩略图生成类
2014/09/23 PHP
php+ajax 实现输入读取数据库显示匹配信息
2015/10/08 PHP
PHP Callable强制指定回调类型的方法
2016/08/30 PHP
ThinkPHP5与单元测试PHPUnit使用详解
2020/02/23 PHP
javascript学习基础笔记之DOM对象操作
2011/11/03 Javascript
jquery parent和parents的区别分析
2013/10/02 Javascript
js数组转json并在后台对其解析具体实现
2013/11/20 Javascript
使用coffeescript编写node.js项目的方法汇总
2015/08/05 Javascript
js识别uc浏览器的代码
2015/11/06 Javascript
基于Angular.js实现的触摸滑动动画实例代码
2017/02/19 Javascript
JS实现的找零张数最小问题示例
2017/11/28 Javascript
vue-cli3搭建项目的详细步骤
2018/12/05 Javascript
iview实现select tree树形下拉框的示例代码
2018/12/21 Javascript
js实现全选反选不选功能代码详解
2019/04/24 Javascript
基于vue实现一个神奇的动态按钮效果
2019/05/15 Javascript
Vue使用axios出现options请求方法
2019/05/30 Javascript
利用Vue-draggable组件实现Vue项目中表格内容的拖拽排序
2019/06/07 Javascript
微信小程序 调用远程接口 给全局数组赋值代码实例
2019/08/13 Javascript
layui中的switch开关实现方法
2019/09/03 Javascript
有关vue 开发钉钉 H5 微应用 dd.ready() 不执行问题及快速解决方案
2020/05/09 Javascript
Openlayers学习之地图比例尺控件
2020/09/28 Javascript
深入理解NumPy简明教程---数组3(组合)
2016/12/17 Python
Python实现冒泡排序的简单应用示例
2017/12/11 Python
Python 依赖库太多了该如何管理
2019/11/08 Python
TensorFlow 显存使用机制详解
2020/02/03 Python
详解python 破解网站反爬虫的两种简单方法
2020/02/09 Python
pytorch模型存储的2种实现方法
2020/02/14 Python
python+selenium+PhantomJS抓取网页动态加载内容
2020/02/25 Python
python实现密码强度校验
2020/03/18 Python
如何使用Python处理HDF格式数据及可视化问题
2020/06/24 Python
CSS3+font字体文件实现圆形半透明菜单具体步骤(图解)
2013/06/03 HTML / CSS
中班中秋节活动反思
2014/02/18 职场文书
个人委托书怎么写
2014/04/04 职场文书
应聘销售主管的求职信
2014/04/26 职场文书
2015年扶贫帮困工作总结
2015/05/20 职场文书
2019同学聚会主持词
2019/05/06 职场文书