Answers:
解决这种情况的最佳方法是通过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);
您可以使用此方法,而不是仅使用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行。