Blog

WordPress 根据页面模板做判断的折腾记录

我们在制作 WordPress 主题时,页面比较丰富的设计,会针对很多页面写专门的页面模板,如 tpl-contact.php 专门给页面 contact 使用的模板。通常 WordPress 主题的头部和尾部内容相同的部分会用 header.php 和 footer.php 给其他模板文件直接调用,但有时我们的写的专门页面模板有些 header.php / footer.php 部分内容跟其他页面有点不同。

举个例子:还是刚才说的 tpl-contact.php,刚好使用 tpl-contact.php 作为模板的页面的 footer 部分有个电话号码,而默认的 page.php 和其他页面模板又不需要,虽然可以给 tpl-contact.php 复制一个 footer.php 改名为其他名(如 footer-contact.php)给 tpl-contact.php 专用(用 get_footer('contact') 调用),但这样好像有点小题大做了。

我以前不知道 WordPress 本身提供了一个函数来判断的,我用了比较麻烦的判断方法,在 footer.php 加了这样的判断来实现,经过比较“坎坷”……

从前有座山,山里有个庙,我用了『 get_page_template() 』函数:

if (is_page()){
	$page_tpl_name = get_page_template(); //获取模板文件全路径
	$page_tpl_name = split('/tpl-', $page_tpl_name); //分割,囧
	if ($page_tpl_name[1] == 'contact.php') {
		/* 显示电话号码 */
	}
}

自从庙里有个老和尚和小和尚后,我用了『 get_post_custom_values() 』来实现

if (is_page()){
	$page_tpl = get_post_custom_values('_wp_page_template'); //获取字段 _wp_page_template 的数组值
	if ( $page_tpl[0] == 'tpl-contact.php' ) { //判断第一个数组值(模板文件名)是否是 tpl-contact.php
		/* 显示电话号码 */
	}
}

当老和尚开始向小和尚讲故事的时候,我才知道 WordPress 本来就有个『 is_page_template() 』函数用来判断模板文件是否使用时,我立即打住老和尚讲无限循环的故事!

if ( is_page_template('tpl-contact.php') ) {
	/* 显示电话号码 */
}

注1:is_page_template 不能用在 loop 里面,如果之前有 loop,先在 loop 后面使用 wp_reset_query(),然后再使用 is_page_template
注2:如果模板文件在某个文件夹里,如 template/tpl-contact.php,那么这样 if ( is_page_template('template/tpl-contact.php') ) //需要wp3.4

具体参考 codex:http://codex.wordpress.org/Function_Reference/is_page_template

zww
or
oooo

声明: 除非注明,ZWWoOoOo文章均为原创,转载请以链接形式标明本文地址
本文地址: http://zww.me/before-i-found-wordpress-function-is-page-template.z-turn

35 comments

  1. 大肥羊 大肥羊

    沙发? :mrgreen:

    沙发
  2. aunsen aunsen

    这样做专题页面就方便多了

    板凳
  3. 热血洒红尘 热血洒红尘

    WP好多实用的函数~

    地板
  4. 甜菜 甜菜

    额...zww你太有爱了

    4楼
  5. 西门 西门

    WP函数好多啊,第一次听这个,不过很有用

    5楼
  6. axiu axiu

    好多和尚!

    6楼
  7. 大发 大发

    我现在都是直接添加一个新query,不新建页面了,比较容易控制

    7楼
  8. 空空裤兜 空空裤兜

    竟然找不到留言页面。。。话说我记得这个评论框从侧栏移到正文部分有教程来着,怎么也找不到了

    8楼
  9. Andrew Andrew

    主题改后,好看多了

    9楼
  10. 郑永 郑永

    这故事挺好,贯穿全文。

    10楼
  11. jalena jalena

    我这里有个模版他是直接在function里面把模版全定义为hook,再用你的这个函数判断实现的!

    11楼
  12. 536 536

    版主,您左下部的Welcome很可爱,请教怎么实现的?
    还有,移动宽带访问不了贵站 :???:

    12楼
    • zwwooooo zwwooooo

      @536
      那个是读取浏览器 cookie 获取评论用户的邮箱,然后显示此邮箱的用户在我这里的评论
      移动宽带啊,没法照顾了,主机在香港

  13. 生活有意思 生活有意思

    WP就是一条学无止尽的路啊,又学到新东西了

    13楼
  14. Demon Demon

    对了.请教大叔一个问题. 我的音乐播放插件,在开启super cache之后就出现了无法获取虾米音乐列表的错误. 应该怎么解决呢?

    14楼
    • zwwooooo zwwooooo

      @Demon
      不清楚啊,没用过音乐播放器插件,硬要解决方法就是不要用缓存了,除非你博客访问量巨大……

    • zwwooooo zwwooooo

      @Demon
      哦,可以考虑用 memcached 的缓存方式

  15. 亿品元素 亿品元素

    博主,还是挺早以前,我在你网站看见左侧调用了外站一排的文章(还图文并茂),不知道能不能分享一下该如何折腾这种功能,试过用“WP_SimplePie_File”,但是只能得到标题,无法实现缩略图显示

    15楼
    • zwwooooo zwwooooo

      @亿品元素
      代码木有写成大众版,提供大概思路:用 rss 获取外站最新文章,然后就有标题、链接、文章摘录了,这些网上很多教程。如果要图片,就要在对方网站的 feed 里面加入文章图片的相关信息(如图片地址),然后用正则过滤出来。

  16. 亿品元素 亿品元素

    用 rss 获取外站最新文章,这个确实网上有很多教程,现在就是不知道如何获取图片,或许你啥时候有空,折腾一文,教教大家?

    16楼
    • zwwooooo zwwooooo

      @亿品元素
      图片是这样的:你在 functions.php 自定义下feed输出,如 if (is_feed()) { //在content后面插入个图片地址 },然后获取此feed后,用正则过滤出图片地址来就行了

  17. 网盘街 网盘街

    wp自带的功能很丰富了,要养成经常查查codex的好习惯 :lol:

    17楼

Leave a Reply