什么是模板? WordPress默认使用主题目录下的page.php作为模板来展示页面,但有时我们需要不同的模板来展示页面,比如登录、注册、提交页面。 这些页面不同于普通页面。 此时,WordPress 提供了页面模板,以便开发者可以自定义 WordPress 页面的外观甚至功能。
页面模板php文件的匹配
在 WordPress 中,页面使用的模板是通过自定义列记录的。 自定义列的名称:_wp_page_template,值为模板的文件名:
- 如果是默认模板page.php,那么_wp_page_template的值为:default。如果是从头到尾的默认模板,WordPress不会添加这个自定义版块
- 如果是主题根目录下的自定义页面模板,那么_wp_page_template的值为文件名,如:page-login.php
- 如果是theme子目录下的页面模板,则_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;}
//以下是获取使用该模板的页面地址
<a href="https://www.mobantu.com/<?php echo get_permalink(get_page_id_from_template('login.php')) ?>" >登录</a>