WordPress中获取所使用的模板的页面ID的简单方法


Posted in PHP onDecember 31, 2015

什么是模板呢?默认情况 WordPress是使用主题目录下page.php来作为模板显示页面的,但是有时候我们需要不同的模板来显示页面,比如登录、注册和投稿页面等,这些页面跟普通的页面是有所区别,这时候WordPress提供了页面模板让开发者可以自定义WordPress页面外观甚至功能。
页面模板php文件的匹配

WordPress中是通过自定义栏目来记录页面所使用的模板的,自定义栏目名称:_wp_page_template,值为模板的文件名:

如果是默认模板page.php,那么 _wp_page_template 的值为:default。如果从始至终都是默认模板,WordPress不会添加此自定义栏目
如果是主题根目录下的自定义页面模板,那么那么 _wp_page_template 的值为文件名,如:page-login.php
如果是主题子目录下的页面模板,那么 _wp_page_template 的值包含路径,如:templates/page-login.php
因为这个自定义栏目的名称是以下划线开头的,属于隐藏的自定义栏目,所以你在页面编辑页的自定义栏目中是看不到这个字段的。

通过页面模板获取页面ID

我新建了一个登录页面的模板,命名为login.php,并且后台已经有页面在使用这个模板了,那我就可以使用以下函数来获取使用login.php这个模板的页面id:

function get_page_id_from_template($template) {
  global $wpdb;

  // 多个页面使用同一个模板我就没辙了
  $page_id = $wpdb->get_var($wpdb->prepare("SELECT `post_id` 
               FROM `$wpdb->postmeta`, `$wpdb->posts`
               WHERE `post_id` = `ID`
                  AND `post_status` = 'publish'
                  AND `meta_key` = '_wp_page_template'
                  AND `meta_value` = %s
                  LIMIT 1;", $template));

  return $page_id;
}

很多人可能会问,获取页面id来干什么?通过id来获取登录页面的链接不行吗:

<a href="<?php 
echo get_permalink(get_page_id_from_template('login.php'))
?>>登录</a>

也有人会问,通过页面标题和别名不也可以获取到页面id吗?如果主题是给客户用了,你知道客户会用什么样的标题?强制客户用你指定的标题?那你太不人性化了吧!

PHP 相关文章推荐
社区(php&amp;&amp;mysql)六
Oct 09 PHP
php 结果集的分页实现代码
Mar 10 PHP
PHP 变量定义和变量替换的方法
Jul 30 PHP
php 空格,换行,跳格使用说明
Dec 18 PHP
PHP函数常用用法小结
Feb 08 PHP
php中导出数据到excel时数字变为科学计数的解决方法
Feb 03 PHP
支持中文和其他编码的php截取字符串函数分享(截取中文字符串)
Mar 13 PHP
PHP动态编译出现Cannot find autoconf的解决方法
Nov 05 PHP
php递归函数三种实现方法及如何实现数字累加
Aug 07 PHP
PHP的Laravel框架中使用消息队列queue及异步队列的方法
Mar 21 PHP
Laravel框架实现定时发布任务的方法
Aug 16 PHP
基于Laravel 5.2 regex验证的正确写法
Sep 29 PHP
WordPress特定文章对搜索引擎隐藏或只允许搜索引擎查看
Dec 31 #PHP
详解Window7 下开发php扩展
Dec 31 #PHP
WordPress用户登录框密码的隐藏与部分显示技巧
Dec 31 #PHP
php+jQuery+Ajax实现点赞效果的方法(附源码下载)
Jul 21 #PHP
WordPress中限制非管理员用户在文章后只能评论一次
Dec 31 #PHP
php实现微信公众号主动推送消息
Dec 31 #PHP
php创建桌面快捷方式实现方法
Dec 31 #PHP
You might like
PHP数字格式化
2006/12/06 PHP
php中生成随机密码的自定义函数代码
2013/10/21 PHP
php搜索文件程序分享
2015/10/30 PHP
基于Laravel实现的用户动态模块开发
2017/09/21 PHP
Yii2 中实现单点登录的方法
2018/03/09 PHP
laravel 判断查询数据库返回值的例子
2019/10/11 PHP
JS DOM 操作实现代码
2010/08/01 Javascript
javascrip客户端验证文件大小及文件类型并重置上传
2011/01/12 Javascript
kmock javascript 单元测试代码
2011/02/06 Javascript
showModalDialog模态对话框的使用详解以及浏览器兼容
2014/01/11 Javascript
改变状态栏文字的js代码
2014/06/13 Javascript
js的touch事件的实际引用
2014/10/13 Javascript
node.js中的fs.truncateSync方法使用说明
2014/12/15 Javascript
javascript实现window.print()去除页眉页脚
2014/12/30 Javascript
浅谈javascript中自定义模版
2015/01/29 Javascript
javascript中undefined与null的区别
2015/08/16 Javascript
jquery正则表达式验证(手机号、身份证号、中文名称)
2015/12/31 Javascript
js获取html的span标签的值方法(超简单)
2016/07/26 Javascript
JS Input里添加小图标的两种方法
2017/11/11 Javascript
使用 webpack 插件自动生成 vue 路由文件的方法
2019/08/20 Javascript
[03:30]DOTA2完美“圣”典精彩集锦
2016/12/27 DOTA
Python实现在线暴力破解邮箱账号密码功能示例【测试可用】
2017/09/06 Python
Python并行分布式框架Celery详解
2018/10/15 Python
Python实现按逗号分隔列表的方法
2018/10/23 Python
Python装饰器如何实现修复过程解析
2020/09/05 Python
详解HTML5中div和section以及article的区别
2015/07/14 HTML / CSS
巴西最大的巴士票务门户:Quero Passagem
2020/11/21 全球购物
什么是.net的Remoting技术
2016/07/08 面试题
nohup的用法
2014/08/10 面试题
优秀志愿者事迹材料
2014/02/03 职场文书
模特职业生涯规划范文
2014/02/26 职场文书
会计的岗位职责
2014/03/15 职场文书
天网工程实施方案
2014/03/26 职场文书
地质灾害防治方案
2014/05/14 职场文书
工会主席事迹材料
2014/06/03 职场文书
css filter和getUserMedia的联合使用
2022/02/24 HTML / CSS