Berikut adalah langkah-langkah cepat tentang bagaimana menu admin WordPress dibangun - Saya tidak berbicara tentang add_menu_page
API, maksud saya menu WordPress default yang sebenarnya.
Memanggil File Menu
Menu, tentu saja, dimuat oleh wp-admin/admin.php
. Tapi itu tidak dimuat melalui API standar yang biasa kita gunakan berdasarkan pada dokumentasi WordPress. Sebaliknya, seluruh menu (semua opsi yang memungkinkan, submenu, dll) dimuat melalui array sederhana yang didefinisikan dalam wp-admin/menu.php
.
Jadi untuk memuat sistem menu, admin.php
hanya require
s menu.php
... sekitar baris 99 di WordPress 3.0.
Memuat Menu
Menu itu sendiri disimpan dalam array global $menu
. Menurut dokumentasi in-line, array menu memiliki elemen-elemen ini:
The elements in the array are:
* 0: Menu item name
* 1: Minimum level or capability required.
* 2: The URL of the item's file
* 3: Class
* 4: ID
* 5: Icon for top level menu
Dasbor, misalnya, adalah:
$menu[2] = array( __('Dashboard'), 'read', 'index.php', '', 'menu-top menu-top-first menu-icon-dashboard', 'menu-dashboard', 'div' );
File melewati dan memuat setiap item menu ke dalam array dan memuat semua item sub-menu mereka ke dalam array yang disebut $submenu
indeks yang didasarkan pada url menu induk. Jadi item submenu Dashboard yang disebut "Dashboard" adalah:
$submenu[ 'index.php' ][0] = array( __('Dashboard'), 'read', 'index.php' );
Setelah sistem selesai memuat semua menu (tidak ada banyak, tetapi sistem melangkah melalui indeks pada waktu 5 atau 10 ... perhatikan bahwa Dashboard, meskipun itu item menu pertama, masih diindeks sebagai item "2" (array PHP mulai dari indeks 0 ... jadi ini memberi Anda beberapa ruang manuver).
Pada titik ini, sistem memanggil wp-admin/includes/menu.php
.
Melangkah melalui Menu
File ketiga ini berjalan melalui setiap item menu dan, berdasarkan hak istimewa yang ditetapkan untuk pengguna saat ini, baik menggunakan menu atau menghapusnya. Pertama, ia menggilir semua sub-menu dan menghapus halaman yang tidak dapat diakses pengguna. Kemudian ia mengulang-ulang halaman induk dan melakukan hal yang sama. Kemudian menghapus pemisah duplikat yang tersisa dari menghilangkan menu.
Akhirnya, ini mengurutkan menu berdasarkan urutan menu yang ditugaskan.
Memesan menu khusus
Pengait admin_menu
dipanggil setelah menu diatur tetapi sebelum apa pun dipesan. Jadi dimungkinkan untuk memesan seluruh sistem menu WordPress tanpa "meretas" API.
Setelah aksi admin_menu
dipecat, halaman khusus Anda dimuat ke dalam sistem. Hal berikutnya yang terjadi, adalah WordPress memeriksa filter bernama custom_menu_order
... filter ini selalu dikembalikan false
dan memberi tahu WordPress apakah Anda ingin menggunakan pesanan khusus atau tidak.
Tambahkan yang berikut ke tema Anda untuk mengatur bendera true
sebagai gantinya dan menentukan urutan menu eksplisit Anda:
function custom_menu_order($menu_ord) {
if (!$menu_ord) return true;
return array('index.php', 'edit.php', 'edit-comments.php');
}
add_filter('custom_menu_order', 'custom_menu_order');
add_filter('menu_order', 'custom_menu_order');
Tentukan urutan yang Anda inginkan untuk semua menu (saya memberikan referensi ke file pemuatan menu sehingga Anda bisa mendapatkan daftar nama file) dan ini harus ditangani.
EDIT (9/2/2010):
Untuk menentukan urutan layar edit jenis kiriman khusus menggunakan metode ini, Anda perlu mengetahui URL layar edit. Saya kebanyakan kasus, itu akan menjadi http://blog.url/wp-admin/edit.php?post_type=POST_TYPE
. Ini tergantung pada bagaimana WordPress diatur di situs Anda (jika itu dipasang di root atau dalam subfolder) dan siput dari jenis posting khusus yang Anda gunakan.
Sebagai contoh...
Katakanlah Anda memiliki jenis posting khusus untuk 'Pertanyaan Stack Exchange' dan Anda ingin editor muncul di bagian yang sama dengan dasbor langsung di bawah ikon dasbor. Anda akan menggunakan kode berikut dalam functions.php
file tema Anda :
function custom_menu_order($menu_ord) {
if (!$menu_ord) return true;
return array('index.php', 'edit.php?post_type=stack_exchange_questions');
}
add_filter('custom_menu_order', 'custom_menu_order');
add_filter('menu_order', 'custom_menu_order');
Sisa menu tidak akan terpengaruh, tetapi halaman edit khusus Anda akan dipindahkan ke bagian yang sama dengan dasbor dan akan muncul tepat di bawahnya. Anda dapat menggunakan ini untuk memindahkan jenis posting khusus Anda ke bagian admin menu mana saja dan menempatkannya dalam urutan apa pun. Anda juga dapat memindahkan item menu standar dengan cara yang sama.
Pastikan Anda menentukan urutan semua item menu di bagian yang diberikan , jika tidak, menu Anda mungkin akan mengalami keanehan yang tidak terduga.