問題描述

我拼命尋找某種方式 (任何方式) 通過 functions.php 文件設置默認的”screen options” 和 metabox 順序。有人有任何幫助他們可以在這裏提供嗎?

最佳解決方案

在後期編輯頁面設置元框的順序

您將需要刪除元框,並按您要的順序再次添加它們。

要禁用元框:(根據您的需要定製,查看 html 代碼中的 metabox id,以瞭解應該使用哪個名稱作為函數的第一個參數)

function my_remove_meta_boxes() {

    remove_meta_box('postcustom', 'post', 'core');

    remove_meta_box('commentsdiv', 'post', 'core');

    ...
}

add_action( 'admin_menu', 'my_remove_meta_boxes' );

刪除它們後,您可以使用 add_meta_box 功能將其添加到新位置:http://codex.wordpress.org/Function_Reference/add_meta_box 。元框的順序取決於您調用 add_meta_box 功能的順序。例如,使用以下代碼片段,註釋元框將在自定義字段元框之前。

function my_add_meta_boxes( $post_type, $post ) {
    if ( ('publish' == $post->post_status || 'private' == $post->post_status) && post_type_supports($post_type, 'comments') )
        add_meta_box('commentsdiv', __('Comments'), 'post_comment_meta_box', $post_type, 'normal', 'core');

    if ( post_type_supports($post_type, 'custom-fields') )
        add_meta_box('postcustom', __('Custom Fields'), 'post_custom_meta_box', $post_type, 'normal', 'core');

    ...
}

add_action( 'add_meta_boxes', 'my_add_meta_boxes' );

你可能想看看文件 wp-admin /edit-form-advanced.php

設置列標題顯示在帖子列表頁面上

您需要使用過濾器管理_ {$ post_type} _posts_columns 。例如,以下代碼段將刪除註釋列。

function my_remove_columns( $posts_columns ) {
    unset( $posts_columns['comments'] );

    return $posts_columns;
}

add_filter( 'manage_post_posts_columns', 'my_remove_columns' );

將默認結果設置為顯示在帖子列表頁面上

使用過濾器’edit_{$post_type}_per_page’ 和’edit_posts_per_page’ 。

function my_edit_post_per_page( $per_page, $post_type ) {

    $edit_per_page = 'edit_' . $post_type . '_per_page';
    $per_page = (int) get_user_option( $edit_per_page );
    if ( empty( $per_page ) || $per_page < 1 )
        $per_page = 1;

    return $per_page;
}

add_filter( 'edit_posts_per_page', 'my_edit_post_per_page' );

要定位特定的帖子類型:

  • 使用 add_filter( 'edit_{post type}_per_page', 'my_edit_post_per_page' );,例如 add_filter( 'edit_post_per_page', 'my_edit_post_per_page' ); 的帖子,add_filter( 'edit_page_per_page', 'my_edit_post_per_page' ); 的頁面。

  • 或使用您的功能中的條件。例如。:

      

    功能 my_edit_post_per_page($ per_page,$ post_type){

      

    if( $post_type == 'post' ) {
        $edit_per_page = 'edit_' . $post_type . '_per_page';
        $per_page = (int) get_user_option( $edit_per_page );
        if ( empty( $per_page ) || $per_page < 1 )
            $per_page = 1;
    }
    
    
    return $per_page;
    

次佳解決方案

在以下示例中,將 {CPT}替換為後綴類型名稱,如 postpagebookeventimaginaryfoobar

add_filter( 'get_user_option_meta-box-order_{CPT}', 'metabox_order' );
function metabox_order( $order ) {
    return array(
        'normal' => join(
            ",",
            array(       // vvv  Arrange here as you desire
                'customdiv-{CPT}',
                'authordiv',
                'slugdiv',
            )
        ),
    );
}

筆記:

  • 除了 normal,您還可以使用 sideadvanced

  • 值為逗號分隔的 div ids,您可以通過查看頁面源代碼來獲取,也可以猜到

  • 存在的任何 metabox 不包括在您的自定義順序中,將自動添加到列表的末尾。

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。