Ini sebuah contoh;
Pertama-tama untuk mengetahui urutan item sub-menu berdasarkan pada kunci arraynya, Anda dapat melakukan var_dump
pada variabel global $ submenu yang akan menampilkan yang berikut;
(Saya menggunakan menu Posting dan sub menu sebagai contoh)
//shortened for brevity....
["edit.php"]=>
array(6) {
[5]=>
array(3) {
[0]=> string(9) "All Posts"
[1]=> string(10) "edit_posts"
[2]=> string(8) "edit.php"
}
[10]=>
array(3) {
[0]=> string(7) "Add New"
[1]=> string(10) "edit_posts"
[2]=> string(12) "post-new.php"
}
[15]=>
array(3) {
[0]=> string(10) "Categories"
[1]=> string(17) "manage_categories"
[2]=> string(31) "edit-tags.php?taxonomy=category"
}
[17]=>
array(3) {
[0]=> string(14) "Sub Menu Title"
[1]=> string(10) "edit_posts"
[2]=> string(17) "sub_menu_page.php"
}
}
Kita dapat melihat bahwa item sub menu saya ditambahkan ke dalam array dengan kunci 17 setelah item default.
Jika misalnya saya ingin menambahkan item sub-menu saya, langsung setelah item sub-menu Semua Posting saya perlu melakukannya dengan mengatur kunci array saya ke masing-masing 6, 7, 8 atau 9 (apa pun setelah 5 dan sebelum 10 masing-masing.
Ini adalah bagaimana kamu melakukannya ...
function change_submenu_order() {
global $menu;
global $submenu;
//set our new key
$new_key['edit.php'][6] = $submenu['edit.php'][17];
//unset the old key
unset($submenu['edit.php'][17]);
//get our new key back into the array
$submenu['edit.php'][6] = $new_key['edit.php'][6];
//sort the array - important! If you don't the key will be appended
//to the end of $submenu['edit.php'] array. We don't want that, we
//our keys to be in descending order
ksort($submenu['edit.php']);
}
Hasil,
["edit.php"]=>
array(6) {
[5]=>
array(3) {
[0]=> string(9) "All Posts"
[1]=> string(10) "edit_posts"
[2]=> string(8) "edit.php"
}
[6]=>
array(3) {
[0]=> string(14) "Sub Menu Title"
[1]=> string(10) "edit_posts"
[2]=> string(17) "sub_menu_page.php"
}
[10]=>
array(3) {
[0]=> string(7) "Add New"
[1]=> string(10) "edit_posts"
[2]=> string(12) "post-new.php"
}
[15]=>
array(3) {
[0]=> string(10) "Categories"
[1]=> string(17) "manage_categories"
[2]=> string(31) "edit-tags.php?taxonomy=category"
}
}
... cobalah dan beri tahu kami bagaimana Anda pergi!
Pembaruan 1:
Tambahkan ini ke file functions.php Anda;
function change_post_menu_label() {
global $menu;
global $submenu;
$my_menu = 'example_page'; //set submenu page via its ID
$location = 1; //set the position (1 = first item etc)
$target_menu = 'edit.php'; //the menu we are adding our item to
/* ----- do not edit below this line ----- */
//check if our desired location is already used by another submenu item
//if TRUE add 1 to our value so menu items don't clash and override each other
$existing_key = array_keys( $submenu[$target_menu] );
if ($existing_key = $location)
$location = $location + 1;
$key = false;
foreach ( $submenu[$target_menu] as $index => $values ){
$key = array_search( $my_menu, $values );
if ( false !== $key ){
$key = $index;
break;
}
}
$new['edit.php'][$location] = $submenu[$target_menu][$key];
unset($submenu[$target_menu][$key]);
$submenu[$target_menu][$location] = $new[$target_menu][$location];
ksort($submenu[$target_menu]);
}
Pembaruan saya mencakup cara yang sedikit lebih mudah untuk menangani pengaturan posisi menu Anda, Anda hanya perlu menentukan nama halaman submenu Anda dan posisi yang Anda inginkan di dalam menu. Namun jika Anda memilih halaman submenu yang $location
sama dengan kunci yang ada, itu akan menimpa kunci itu dengan Anda, sehingga item menu akan hilang dengan item menu Anda di tempatnya. Menambah atau mengurangi nomor untuk memesan menu Anda dengan benar jika itu masalahnya. Mirip, jika seseorang menginstal plugin yang memengaruhi area menu yang sama, dan yang memiliki $location
item submenu yang sama dengan Anda maka masalah yang sama akan terjadi. Untuk menghindari itu, contoh Kaiser menyediakan beberapa pemeriksaan dasar untuk itu.
Pembaruan 2:
Saya telah menambahkan blok kode tambahan yang memeriksa semua kunci yang ada dalam array terhadap keinginan kita $location
dan jika kecocokan ditemukan, kita akan menambah $location
nilai kita 1
untuk menghindari item menu saling menimpa. Ini adalah kode yang bertanggung jawab untuk itu,
//excerpted snippet only for example purposes (found in original code above)
$existing_key = array_keys( $submenu[$target_menu] );
if ($existing_key = $location)
$location = $location + 1;
Pembaruan 3: (skrip direvisi untuk memungkinkan pengurutan beberapa item sub-menu)
add_action('admin_init', 'move_theme_options_label', 999);
function move_theme_options_label() {
global $menu;
global $submenu;
$target_menu = array(
'themes.php' => array(
array('id' => 'optionsframework', 'pos' => 2),
array('id' => 'bp-tpack-options', 'pos' => 4),
array('id' => 'multiple_sidebars', 'pos' => 3),
)
);
$key = false;
foreach ( $target_menu as $menus => $atts ){
foreach ($atts as $att){
foreach ($submenu[$menus] as $index => $value){
$current = $index;
if(array_search( $att['id'], $value)){
$key = $current;
}
while (array_key_exists($att['pos'], $submenu[$menus]))
$att['pos'] = $att['pos'] + 1;
if ( false !== $key ){
if (array_key_exists($key, $submenu[$menus])){
$new[$menus][$key] = $submenu[$menus][$key];
unset($submenu[$menus][$key]);
$submenu[$menus][$att['pos']] = $new[$menus][$key];
}
}
}
}
}
ksort($submenu[$menus]);
return $submenu;
}
Dalam contoh di atas Anda dapat menargetkan beberapa sub menu dan beberapa item per sub menu dengan mengatur parameter yang sesuai di dalam $target_menu
variabel yang menyimpan array nilai multi-dimensi.
$target_menu = array(
//menu to target (e.g. appearance menu)
'themes.php' => array(
//id of menu item you want to target followed by the position you want in sub menu
array('id' => 'optionsframework', 'pos' => 2),
//id of menu item you want to target followed by the position you want in sub menu
array('id' => 'bp-tpack-options', 'pos' => 3),
//id of menu item you want to target followed by the position you want in sub menu
array('id' => 'multiple_sidebars', 'pos' => 4),
)
//etc....
);
Revisi ini akan mencegah saling bertukar item sub-menu satu sama lain jika mereka memiliki kunci (posisi) yang sama, karena akan siklus melalui sampai menemukan kunci yang tersedia (posisi) yang tidak ada.