問題描述

我正在下拉選單中顯示自定義分類。每個分類法在側邊欄中都有自己的小包裝。是否可以將分類法移到我的自定義寫入框內,用於 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。