web-dev-qa-db-ja.com

Menu_positionを使用してカスタム投稿タイプメニューを投稿メニューの上に配置する

menu_positionパラメータを考え出しました カスタム投稿タイプのメニューをほぼどこにでも配置できるようです。投稿メニューの上を除いて!

どうすればそれを達成できますか。

16
janoChen

コアメニュー項目の位置

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

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

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

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

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

13
Michael Ecklund

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

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を試すとどうなりますか?

4
Chip Bennett

これはWordPressのバグです。 Tracでこのスレッドを見てください: http://core.trac.wordpress.org/ticket/14755

4.4で修正されました...

https://developer.wordpress.org/reference/functions/add_menu_page/#notes

2
Merne

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

本当に問題ではありません。あなたがそれをいじって遊べば、あなたはそれを容易に理解することができます。

'menu_position' => 1を使用すると、それを区切り文字の上のDashboardメニュー項目の下に配置する必要があります。 0ダッシュボードの上に置くべきです

2
jaredwilli

Web上で解決策を探していますが見つかりませんでした。単に(例えば)このトリックをします。ここにあなたはポジションのネイティブリストを持っています:

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

あなたがもっとアイテムを持っているならば、あなたはグローバル$メニューを印刷することによってそれぞれのアイテムの現在の位置を読むことができます:

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');

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

2
Nolan Crochot

これが問題全体に対する警告です。

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
Artistan

これを使うことができます:

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を使用して、投稿メニューの上にメニューを追加できます。

1

あなたがリンクしたのと同じリンクで、それは読みます:

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_position4のようなものに設定するなら、それはそれを投稿の上に置くべきです。

-1の位置は、それをDashboardリンクの上に置きます。

1
Zack

WordPress 4.9の実用的な解決策としては、CPTのmenu_position Posts 'より1つ上の6に設定し、それから以下のコードでそれらを交換してください。

add_filter('custom_menu_order', '__return_true');
add_filter('menu_order', function($menu_order) {
    $k = array_search($v = 'edit.php', $menu_order);
    $menu_order[$k] = $menu_order[$k + 1];
    $menu_order[$k + 1] = $v;
    return $menu_order;
});

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

1
Walf

あなたは(文字列として)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 );
0
Vladan