码库记事本

码库记事本

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

小诸哥 0

这篇文章主要介绍了WordPress中加载模板的get_template_part函数,其中重点讲解了其函数钩子的使用,需要的朋友可以参考下。

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

Twenty Eleven 中 实例如下:

Twenty Eleven index.php 文件

行:21

  1. <?php if ( have_posts() ) : ?> 
  2.  <?php twentyeleven_content_nav( 'nav-above' ); ?> 
  3.  <?php /* Start the Loop 在循环中使用以调用不同类型的文章 */ ?> 
  4.  <?php while ( have_posts() ) : the_post(); ?> 
  5.  <?php get_template_part( 'content', get_post_format() ); ?> 
  6.  <?php endwhile; ?> 
  7. ............................ 
  8. <?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文件给主题添加导航条:

  1. <?php get_template_part( 'nav' );      // Navigation bar (nav.php) ?> 
  2. <?php get_template_part( 'nav''2' );   // Navigation bar #2 (nav-2.php) ?> 
  3. <?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 源程序。

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

实例

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

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

标签: 加载 模板 template 函数