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

有什么想法吗?

评论

如果不需要“实时”运行(即更改页面模板不需要使元框立即显示/消失),请参阅以下相关问题:wordpress.stackexchange.com/questions/48611/…

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

#1 楼

解决这种情况的最佳方法是通过JavaScript。这样,无论何时更改选定的值,您都可以立即隐藏/显示相关的metabox。

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。在此示例中,我仅在选择默认页面模板的情况下显示帖子缩略图的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);


评论


哇谢谢你!我将尽快对此进行测试,并将相应地进行报告。

–乔纳森·沃尔德
2011年5月26日15:11

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

–罗斯
2011年6月14日在21:14

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

–user12082
2012年1月15日13:26

#2 楼

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