我通过在为我的自定义帖子类型创建的metabox上使用自定义分类法实现了这一点,方法如下:
首先,我将此添加到functions.php
:
add_action( \'admin_menu\', \'remove_default_metaboxes\' );
function remove_default_metaboxes() {
// Remove \'Keywords\' (like tags) metabox
remove_meta_box( \'tagsdiv-keyword\', \'my-custom-post-type-slug\', \'side\' );
// Remove \'Groups\' (like categories) metabox
remove_meta_box( \'groupdiv\', \'my-custom-post-type-slug\', \'side\' );
}
函数的第一个参数
remove_meta_box()
实际上是WordPress生成的id。如果您使用的是非层次分类法(即“Tags”),那么它将始终是“tagsdiv”,后跟您的自定义分类法slug。如果是层次分类法(即“类别”),id将是slug,后跟“div”,没有空格。
然后,我将以下代码放在我的metabox模板上:
<div class="groups">
<?php
$box = array(
\'args\' => array(
\'taxonomy\' => \'group\'
),
\'title\' => \'Groups\'
);
post_categories_meta_box($post, $box)
?>
</div>
<div class="keywords inside">
<?php
global $post_ID;
$post = get_post( $post_ID );
$box = array(
\'args\' => array(
\'taxonomy\' => \'keyword\'
)
);
post_tags_meta_box($post, $box);
?>
</div>
最后,请注意,对于“关键字”或任何其他类似标记的分类法,这是不够的。标签元盒功能是通过JS实现的,JS依赖于不是由上述函数创建的选择器。在我的例子中,通过将类“inside”添加到关键字div,并将这些行添加到单独的JS文件中,可以解决这个问题:
$(\'.keywords\').each(function(){
tagBox.init();
return false;
});
只要确保在WP加载了默认的Post脚本之后调用JS即可。如果出于某种原因不想添加更多脚本,可以通过模仿WP的结构来实现相同的效果,如下所示:
<div id="side-sortables">
<div id="tagsdiv-keyword" class="postbox inside">
// post_tags_meta_box() etc
</div>
</div>