menu_positionを使用して、投稿メニューの上にカスタム投稿タイプメニューを配置しますか?


回答:


14

コアメニュー項目の位置

  • 2ダッシュボード
  • 4セパレーター
  • 5投稿
  • 10メディア
  • 15リンク
  • 20ページ
  • 25コメント
  • 59セパレーター
  • 60外観
  • 65プラグイン
  • 70ユーザー
  • 75ツール
  • 80設定
  • 99セパレーター

「メニュー位置」のパラメーターの説明

$position整数)(オプション)このメニューが表示されるメニュー順の位置。デフォルトでは、このパラメーターが省略された場合、メニューはメニュー構造の下部に表示されます。数字が大きいほど、メニュー内の位置が低くなります。

警告: 2つのメニュー項目が同じ位置属性を使用する場合、1つの項目のみが表示されるように、項目の1つが上書きされる場合があります!競合のリスクは、整数値の代わりに10進数、たとえば63ではなく63.3を使用することで低減できます。

デフォルト:メニュー構造の下部


4

新しいJetPackプラグインは、ダッシュボードリンクのすぐ下にメニューリンクを配置します。これは、メニューの順序を0に設定し、配列$ menu_orderをフィルター処理することにより行います

function jetpack_menu_order( $menu_order ) {
        $jp_menu_order = array();

        foreach ( $menu_order as $index => $item ) {
            if ( $item != 'jetpack' )
                $jp_menu_order[] = $item;

            if ( $index == 0 )
                $jp_menu_order[] = 'jetpack';
        }

        return $jp_menu_order;
    }

好奇心から、menu_positionとして0を試してみたらどうなりますか?


2

'menu_postion' => 0、1,2,3,4を使用しました。

本当に関係ありません。それをいじってみれば、簡単に理解できます。

'menu_position' => 1を使用すると、セパレーター上のダッシュボードメニュー項目の下に配置する必要があります。0ダッシュボードの上に配置する必要があります


2

ウェブ上のソリューションを探していますが見つかりませんでした。このトリックを行うだけです(たとえば)。ネイティブのポジションリストがあります。

  • 2ダッシュボード
  • 4セパレーター
  • 5投稿
  • 10メディア
  • 15リンク
  • 20ページ
  • 25コメント
  • 59セパレーター
  • 60外観
  • 65プラグイン
  • 70ユーザー
  • 75ツール
  • 80設定
  • 99セパレーター

さらにアイテムがある場合は、グローバルな$ menuを印刷して、各アイテムの現在の位置を読み取ることができます。

global $menu; 
print_r($menu); 

だから、私がよく理解していれば、私たちが望むようにメニューを並べ替えることを妨げるものは何もありません:

function re_order_menu () {
    // ------- Put away items 
    $dashboard = $menu[2]
    $separator1 = $menu[4]
    $posts = $menu[5]
    $media = $menu[10]
    $links = $menu[15]
    $pages = $menu[20]
    $comments = $menu[25]
    $separator2 = $menu[59]
    $appearance = $menu[60]
    $plugins = $menu[65]
    $users = $menu[70]
    $tools = $menu[75]
    $settings = $menu[80]
    $separator3 = $menu[99]

    // -------- Reset menu  
    unset($menu[2]);
    unset($menu[4]);
    unset($menu[5]);
    unset($menu[10]);
    unset($menu[15]);
    unset($menu[20]);
    unset($menu[25]);
    unset($menu[59]);
    unset($menu[60]);
    unset($menu[65]);
    unset($menu[70]);
    unset($menu[75]);
    unset($menu[80]);
    unset($menu[99]);

    // -------- Re-order menu as you want
    $dashboard = $menu[2];
    $separator1 = $menu[4]
    $posts = $menu[5];
    $books = $menu[6];
    /* my tons of custom items */
    $authors  = $menu[7];
    $requests = $menu[8];
    $clients = $menu[9];
    $sellers  = $menu[10];
    $services = $menu[11];
    $schedules = $menu[12];
    /* let some space after */ 
    $media = $menu[30];
    $links = $menu[31];
    $pages = $menu[32];
    $comments = $menu[33];
    $separator2 = $menu[59];
    $appearance = $menu[60];
    $plugins = $menu[65];
    $users = $menu[70];
    $tools = $menu[75];
    $settings = $menu[80]
    $separator3 = $menu[99];

} 
add_action('admin_menu', 're_order_menu');

私にとってはうまくいくので、これは合法だと思います、私は間違っていますか?


マジックナンバーに依存する非常に脆弱なソリューション。他のプラグインが追加/削除されるとすぐに壊れて、他のプラグインの中にアイテムが配置されます。
ウォルフ


1

これを使用できます:

function my_move_post () {
    global $menu;
    $menu[6] = $menu[5]; //move post from post 5 to 6
    unset($menu[5]); //free the position 5 so you can use it!
}
add_action('admin_menu', 'my_move_post');

位置5を使用して、[投稿]メニューの上にメニューを追加できます。


これはうまくいきませんでした。custom-post-type.phpファイルがあるサイト全体のプラグイン内に配置しました
ダニエル

1

ここに問題全体の警告があります...

WordPress 4.9.2

wp-admin / menu.php:

// If we're to use $_wp_last_object_menu, increment it first.
$ptype_menu_position = is_int( $ptype_obj->menu_position ) ? $ptype_obj->menu_position : ++$_wp_last_object_menu; 

注意:整数であり、まだ設定されていない必要があります。そうでない場合、リストの一番下に移動します。


1

WordPress 5以下で動作するソリューションの場合、次のコードを使用して再配置します。

add_filter('custom_menu_order', '__return_true');
add_filter('menu_order', function($menu_order) {
    if (
        false !== ($k1 = array_search($v1 = 'edit.php', $menu_order))
        && false !== ($k2 = array_search($v2 = 'edit.php?post_type=foo', $menu_order))
    ) {
        array_splice($menu_order, $k1, 0, $v2);
        array_splice($menu_order, $k2 + 1, 1);
    }
    return $menu_order;
});

これは、ポールポジションを争うメニューアイテムが複数ないことを前提としています。


0

リンクした同じリンクで、次のように表示されます。

menu_position
(integer) (optional) The position in the menu order the post type should appear.
Default: null - defaults to below Comments
5 - below Posts
10 - below Media
20 - below Pages
60 - below first separator
100 - below second separator

したがって、のような設定menu_positionを行った場合4、投稿の上に配置する必要があります。

の位置は-1Dashboardリンクの上に配置します。


4を試しましたが、5とまったく同じです。
janoChen11年

ふむ 1-3を試しましたか?おそらく「1」(または「0」)がダッシュボードだと思います。おそらく2〜3が機能するでしょう
ザック

0 1 2 3ダッシュボードの前に移動し、4投稿の下に移動します。本当に不可能です!
janoChen

ワオ。多くのWordPressが壊れていますか?私にはわかりません。:-/
ザック

4はPostsのすぐ上のセパレーターで、5はPostsであると思います。したがって、menu-positionを3に設定すると、セパレーターの直前になります。もちろんデフォルト設定で。プラグインページを4に設定すると、セパレータが上書きされましたが、投稿のすぐ上に表示されました。うーん...
goldenapples

0

10進値を(文字列として)使用できます。たとえば、メニューの最後の位置(100001、100002、100003)に配置したカスタム投稿タイプがあります。

次に、このコードを配置して、投稿の上ダッシュボードメニュー項目の下に移動します。

function reorder_admin_menu() {

  global $menu;

  // Add one separator

  $menu["3.1"] = array(
    0 =>  '',
    1 =>  'read',
    2 =>  'separator_' . "anything_unique",
    3 =>  '',
    4 =>  'wp-menu-separator'
    );

  // I have put my menu items waay at the end (exactly these values), so move them up

  $menu["3.2"] = $menu[100001];
  $menu["3.3"] = $menu[100002];
  $menu["3.4"] = $menu[100003];

  unset($menu[100001]);
  unset($menu[100002]);
  unset($menu[100003]);

  // move Media menu (position 10) item to front, in the same group
  $menu["3.5"] = $menu[10];
  unset($menu[10]);

  // Debug: ksort($menu); error_log( var_export( $menu, true ) );
}

add_action( 'admin_menu', 'reorder_admin_menu', 999 );
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.