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

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

35 comments

  1. 大肥羊 大肥羊 Firefox 29.0Windows 7

    沙发? :mrgreen:

    沙发
  2. aunsen aunsen Firefox 29.0Windows 8.1 x64 Edition

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

    板凳
  3. 热血洒红尘 热血洒红尘 Google Chrome 33.0.1750.154Windows 7 x64 Edition

    WP好多实用的函数~

    地板
  4. 甜菜 甜菜 Sogou ExplorerWindows 8.1

    额...zww你太有爱了

    4楼
  5. 西门 西门 Google Chrome 34.0.1847.131Mac OS X 10.9.2

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

    5楼
  6. axiu axiu Google Chrome 35.0.1916.114Windows 7 x64 Edition

    好多和尚!

    6楼
  7. 大发 大发 Firefox 29.0Windows 7

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

    7楼
  8. 空空裤兜 空空裤兜 Google Chrome 35.0.1916.114Windows 7

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

    8楼
  9. Andrew Andrew Google Chrome 26.4.9999.1900Windows 7

    主题改后,好看多了

    9楼
  10. 郑永 郑永 Firefox 29.0Windows XP

    这故事挺好,贯穿全文。

    10楼
  11. jalena jalena Google Chrome 35.0.1916.114Windows 7 x64 Edition

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

    11楼
  12. 536 536 Google Chrome 33.0.1750.146Windows XP

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

    12楼
    • zwwooooo zwwooooo Firefox 29.0Windows 8.1 x64 Edition

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

  13. 生活有意思 生活有意思 Firefox 29.0Windows 8.1 x64 Edition

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

    13楼
  14. Demon Demon Google Chrome 35.0.1916.153Windows 7 x64 Edition

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

    14楼
    • zwwooooo zwwooooo Firefox 30.0Windows 8.1 x64 Edition

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

    • zwwooooo zwwooooo Firefox 30.0Windows 8.1 x64 Edition

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

  15. 亿品元素 亿品元素 TheWorld BrowserWindows 7 x64 Edition

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

    15楼
    • zwwooooo zwwooooo Firefox 30.0Windows 8.1 x64 Edition

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

  16. 亿品元素 亿品元素 TheWorld BrowserWindows 7 x64 Edition

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

    16楼
    • zwwooooo zwwooooo Firefox 30.0Windows 8.1 x64 Edition

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

  17. 网盘街 网盘街 Firefox 30.0Windows 7 x64 Edition

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

    17楼

Leave a Reply