我们在制作 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
- 本文标题:WordPress 根据页面模板做判断的折腾记录
- 本文链接:https://zww.me/before-i-found-wordpress-function-is-page-template.z-turn
- 发布时间:2014年05月24日 10:18
- 版权声明:除非注明,文章均为 zwwooooo 原创,转载请以链接形式标明本文地址!
沙发?
@大肥羊
对的!
@zwwooooo
MikroTik RB951G-2HnD 你这个路由器在哪买的呢?
@大肥羊
http://mikrotik.taobao.com
这样做专题页面就方便多了
@aunsen
嗯,有时会有这种需要
WP好多实用的函数~
额...zww你太有爱了
@甜菜
这……指啥
WP函数好多啊,第一次听这个,不过很有用
@西门
围观西门大叔的土豪Mac
@西门
函数太多,通常遇到需求才会去挖
好多和尚!
@axiu
你博客首页是故意的么?文章内容宽度
我现在都是直接添加一个新query,不新建页面了,比较容易控制
@大发
新query?怎么用?没页面你怎么访问?
@zwwooooo
query_vars,就像分类页,标签页一样
竟然找不到留言页面。。。话说我记得这个评论框从侧栏移到正文部分有教程来着,怎么也找不到了
@空空裤兜
你是说评论跟随么?这个我没写吧
主题改后,好看多了
这故事挺好,贯穿全文。
@郑永
这……如果有人有这个需求,希望别这样走弯路了,哈
我这里有个模版他是直接在function里面把模版全定义为hook,再用你的这个函数判断实现的!
版主,您左下部的Welcome很可爱,请教怎么实现的?
还有,移动宽带访问不了贵站
@536
那个是读取浏览器 cookie 获取评论用户的邮箱,然后显示此邮箱的用户在我这里的评论
移动宽带啊,没法照顾了,主机在香港
WP就是一条学无止尽的路啊,又学到新东西了
对了.请教大叔一个问题. 我的音乐播放插件,在开启super cache之后就出现了无法获取虾米音乐列表的错误. 应该怎么解决呢?
@Demon
不清楚啊,没用过音乐播放器插件,硬要解决方法就是不要用缓存了,除非你博客访问量巨大……
@Demon
哦,可以考虑用 memcached 的缓存方式
博主,还是挺早以前,我在你网站看见左侧调用了外站一排的文章(还图文并茂),不知道能不能分享一下该如何折腾这种功能,试过用“WP_SimplePie_File”,但是只能得到标题,无法实现缩略图显示
@亿品元素
代码木有写成大众版,提供大概思路:用 rss 获取外站最新文章,然后就有标题、链接、文章摘录了,这些网上很多教程。如果要图片,就要在对方网站的 feed 里面加入文章图片的相关信息(如图片地址),然后用正则过滤出来。
用 rss 获取外站最新文章,这个确实网上有很多教程,现在就是不知道如何获取图片,或许你啥时候有空,折腾一文,教教大家?
@亿品元素
图片是这样的:你在 functions.php 自定义下feed输出,如 if (is_feed()) { //在content后面插入个图片地址 },然后获取此feed后,用正则过滤出图片地址来就行了
wp自带的功能很丰富了,要养成经常查查codex的好习惯
@网盘街
有时你需要时就找不到