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编程开发“虚拟域名”系统
Oct 09 PHP
E路文章系统PHP
Dec 11 PHP
PHP 简单日历实现代码
Oct 28 PHP
php object转数组示例
Jan 15 PHP
PHP解码unicode编码的中文字符代码分享
Aug 13 PHP
thinkphp模板用法和内容输出实例
Nov 28 PHP
高质量PHP代码的50个实用技巧必备(下)
Jan 22 PHP
php图片添加文字水印实现代码
Mar 15 PHP
php 截取utf-8格式的字符串实例代码
Oct 30 PHP
PHP后台实现微信小程序登录
Aug 03 PHP
PHP进阶学习之类的自动加载机制原理分析
Jun 18 PHP
PHP的介绍以及优势详细分析
Sep 05 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无限分类的类
2007/01/02 PHP
PHP 网页过期时间的控制代码
2009/06/29 PHP
用PHP的ob_start() 控制您的浏览器cache
2009/08/03 PHP
WordPress中编写自定义存储字段的相关PHP函数解析
2015/12/25 PHP
laravel自定义分页效果
2017/07/23 PHP
js Map List 遍历使用示例
2013/07/10 Javascript
利用javascript实现禁用网页上所有文本框,下拉菜单,多行文本域
2013/12/14 Javascript
IE6-8中Date不支持toISOString的修复方法
2014/05/04 Javascript
Jquery图片延迟加载插件jquery.lazyload.js的使用方法
2014/05/21 Javascript
javascript自定义的addClass()方法
2014/05/28 Javascript
JavaScript中获取高度和宽度函数总结
2014/10/08 Javascript
JavaScript实现仿淘宝商品购买数量的增减效果
2016/01/22 Javascript
利用JS轻松实现获取表单数据
2016/12/06 Javascript
带你快速理解javascript中的事件模型
2017/08/14 Javascript
JavaScript EventEmitter 背后的秘密 完整版
2018/03/29 Javascript
如何解决vue2.0下IE浏览器白屏问题
2018/09/13 Javascript
vue将毫秒数转化为正常日期格式的实例
2018/09/16 Javascript
node.js中express模块创建服务器和http模块客户端发请求
2019/03/06 Javascript
Vue实现点击箭头上下移动效果
2020/06/11 Javascript
[01:33:25]DOTA2-DPC中国联赛 正赛 Elephant vs IG BO3 第一场 1月24日
2021/03/11 DOTA
python获取指定目录下所有文件名列表的方法
2015/05/20 Python
pytorch cnn 识别手写的字实现自建图片数据
2018/05/20 Python
Numpy 将二维图像矩阵转换为一维向量的方法
2018/06/05 Python
Python中的上下文管理器相关知识详解
2019/09/19 Python
使用python-opencv读取视频,计算视频总帧数及FPS的实现
2019/12/10 Python
使用python的turtle函数绘制一个滑稽表情
2020/02/28 Python
python小程序之4名牌手洗牌发牌问题解析
2020/05/15 Python
Pytest测试框架基本使用方法详解
2020/11/25 Python
CSS3中各种颜色属性的使用教程
2016/05/17 HTML / CSS
德国自行车商店:Tretwerk
2019/06/21 全球购物
安全标语大全
2014/06/10 职场文书
语文教师个人工作总结
2015/02/06 职场文书
初中政治教师教学反思
2016/02/23 职场文书
React forwardRef的使用方法及注意点
2021/06/13 Javascript
Python机器学习之底层实现KNN
2021/06/20 Python
MySQL 那些常见的错误设计规范,你都知道吗
2021/07/16 MySQL