我通过在为我的自定义帖子类型创建的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>