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


18

只想将某个模板分配给特定的WordPress页面时显示自定义字段界面。

有任何想法吗?


如果它不必须是“活的”(即改变页面模板并不需要做出metabox出现/消失立即)看到此相关的问题:wordpress.stackexchange.com/questions/48611/...
斯蒂芬·哈里斯

@StephenHarris感谢您的评论。我总结了WPAlchemy MetaBox类,该类在设置中包含“每个模板”选项。
乔纳森·沃尔德

Answers:


22

解决这种情况的最佳方法是通过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,仅根据页面模板下拉列表中的所选值隐藏或显示一个metabox。在此示例中,我仅在选择默认页面模板的情况下显示帖子缩略图的元框:

(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);

哇谢谢你!我将尽快对此进行测试,并将相应地进行报告。
乔纳森·沃尔德

太棒了...这就是我所需要的。对我来说完美。谢谢!!!
罗斯

抱歉,我是javascript的真正初学者,我知道那是我需要的东西,但是似乎我无法以正确的方式进行操作...所以我不确定是否了解我必须更改javascript文件。是否可以对像我这样的nooby进行更多说明?;)

1

您可以使用此方法,而不是仅使用jQuery来隐藏该metabox。唯一的区别是,隐藏/显示元框需要在更改下拉字段后选择“更新”。

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行。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.