menu_positionパラメーターを計算したところ、カスタム投稿タイプのメニューをほぼどこにでも配置できるようです。[投稿]メニューの上を除く!
どうすればそれを達成できますか?
menu_positionパラメーターを計算したところ、カスタム投稿タイプのメニューをほぼどこにでも配置できるようです。[投稿]メニューの上を除く!
どうすればそれを達成できますか?
回答:
コアメニュー項目の位置
「メニュー位置」のパラメーターの説明
$position
(整数)(オプション)このメニューが表示されるメニュー順の位置。デフォルトでは、このパラメーターが省略された場合、メニューはメニュー構造の下部に表示されます。数字が大きいほど、メニュー内の位置が低くなります。警告: 2つのメニュー項目が同じ位置属性を使用する場合、1つの項目のみが表示されるように、項目の1つが上書きされる場合があります!競合のリスクは、整数値の代わりに10進数、たとえば63ではなく63.3を使用することで低減できます。
デフォルト:メニュー構造の下部
新しい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ダッシュボード
- 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');
私にとってはうまくいくので、これは合法だと思います、私は間違っていますか?
これはWordPressのバグです。Tracのこのスレッドをご覧ください:http : //core.trac.wordpress.org/ticket/14755
4.4で修正...
https://developer.wordpress.org/reference/functions/add_menu_page/#notes
これを使用できます:
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を使用して、[投稿]メニューの上にメニューを追加できます。
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;
});
これは、ポールポジションを争うメニューアイテムが複数ないことを前提としています。
リンクした同じリンクで、次のように表示されます。
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
、投稿の上に配置する必要があります。
の位置は-1
、Dashboard
リンクの上に配置します。
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 );