问题描述

我正在下拉菜单中显示自定义分类。每个分类法在侧边栏中都有自己的小包装。是否可以将分类法移到我的自定义写入框内,用于 ease-of-use 目的?

最佳解决方法

以下是从 「移动作者发布框」 的任务,但它应该给你一个起点。接下来你应该看看 「/wp-admin/edit-form-advanced.php」,在那里你会发现一些关于 get_object_taxonomies()的东西,看看你的东西如何被命名,所以你可以删除和添加东西。

function wpse_remove_author_box() 
{
    if ( ! is_admin() )
        return;

    remove_meta_box( 'authordiv', 'post', 'normal' ); 
}
add_action( 'admin_menu', 'wpse_remove_author_box' );

function wpse_author_to_publish_box() 
{
    if ( ! is_admin() )
        return;

    global $post_ID;
    $post = get_post( $post_ID );
        ?>
        <div id="author" class="misc-pub-section" style="border-top-style:solid; border-top-width:1px; border-top-color:#EEEEEE; border-bottom-width:0px;">
            Author: 
            <?php post_author_meta_box( $post ); ?>
        </div>
        <?php 
}
add_action( 'post_submitbox_misc_actions', 'wpse_author_to_publish_box' );

次佳解决方法

我通过以下方式为自定义职位类型创建了一个代表变量的自定义分类法:

首先我把它添加到我的 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 。如果您使用的是 non-hierarchical 分类法 (即”Tags”),则它始终是”tagsdiv-“,其后是您的自定义分类标记。如果它是一个分层分类 (即”Category”),那么 ID 将是随后的”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>

最后,请注意,在”Keywords” 或任何其他 Tag-like 分类法的情况下,这还不够。标签 metabox 功能通过 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>

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。