根据所选页面模板切换管理元数据

时间:2011-05-24 作者:Jonathan Wold

我希望当某个模板被分配到特定的WordPress页面时,只显示一个自定义字段界面。

有什么想法吗?

2 个回复
最合适的回答,由SO网友:Geert 整理而成

处理这种情况的最佳方法是通过JavaScript。这样,只要选定的值发生更改,就可以立即隐藏/显示相关的元盒。

使用wp_enqueue_script() 在里面functions.php 要在管理区域中加载自定义JavaScript文件,请执行以下操作:

add_action(\'admin_enqueue_scripts\', \'my_admin_script\');
function my_admin_script()
{
    wp_enqueue_script(\'my-admin\', get_bloginfo(\'template_url\').\'/my-admin.js\', array(\'jquery\'));
}
脚本本身需要jQuery,它只是根据页面模板下拉列表中的选定值隐藏或显示一个元框。在本例中,我仅在选择默认页面模板的情况下显示post缩略图的元框:

(function($){
$(document).ready(function() {

    var $page_template = $(\'#page_template\')
        ,$metabox = $(\'#postimagediv\'); // For example

    $page_template.change(function() {
        if ($(this).val() == \'default\') {
            $metabox.show();
        } else {
            $metabox.hide();
        }
    }).change();

});
})(jQuery);
而且,为了好玩,这里有一个简短、不太冗长的同一脚本版本:

(function($){
$(function() {

    $(\'#page_template\').change(function() {
        $(\'#postimagediv\').toggle($(this).val() == \'default\');
    }).change();

});
})(jQuery);

SO网友:davidcondrey

您可以使用此选项,而不是仅通过jQuery渲染元盒来隐藏它。唯一的区别是,隐藏/显示元盒需要在更改下拉字段后选择“更新”。

function add_meta_box() {
    global $post;
    if(!empty($post)) {
        $pageTemplate = get_post_meta($post->ID, \'_wp_page_template\', true);

        if($pageTemplate == \'your-page-template-here.php\' ) {
            add_meta_box( $id, $title, $callback, \'page\', $context, $priority, $callback_args );
        }
    }
}
add_action( \'add_meta_boxes\', \'add_meta_box\' );
只需根据需要更新第6行和第7行。

结束