WordPress主题开发

如何获取用户编辑页面时选择的模版

用户编辑页面时可以在页面属性中选择一个模版,本文介绍在用户保存页面后如何获取被选择的模版的名称。

每个页面使用的模版以post meta形式存储,meta key为_wp_page_template,所以在后台编辑page界面获取当前页面模版名称的方法如下

$template_file = get_post_meta($post_id,'_wp_page_template',TRUE);

$post_id代表当前页面的ID,如何获取要视情况而定。

实例

当用户选择模版page-category.php时,显示category box。

add_action('init', 'cp_mcp_init');

function cp_mcp_init() {
    $post_id = $_GET['post'] ? $_GET['post'] : $_POST['post_ID'] ;
    if( !empty($post_id) ) {
        $template_file = get_post_meta($post_id,'_wp_page_template',TRUE);
        if ( $template_file == 'page-category.php' && function_exists('register_taxonomy_for_object_type')) {
            register_taxonomy_for_object_type('category', 'page');
        }
    }    
}

因为该段代码在init钩子的位置执行,此时$post全局变量还未定义,因此只能通过get方法获取url中的post_ID判断当前页面的ID

如果$post全局变量已经定义,则获取页面ID方法如下

global $post;
$post_id = $post->ID;

参考文章

How to add add_meta_box to specific Page Template?

Add metabox to a "Page" that uses a specific template