Hai @BinaryBit:
Tidak heran Anda sedikit frustrasi; menu admin adalah salah satu implementasi yang paling tumpul dan membuat frustrasi melalui inti WordPress. Jujur, saya tidak tahu apa yang mereka pikirkan ketika mereka mendesainnya seperti itu.
@EAMann melakukan pekerjaan yang sangat baik untuk menjelaskan cara kerja menu admin di WordPress (saya berharap saya bisa membacanya sekitar 4 bulan yang lalu ... :)
Namun, setelah saya menemukan cara kerjanya, saya masih bingung untuk bekerja dengannya tanpa mencurahkan cukup waktu untuk menjaga pikiran saya tetap lurus sementara saya mencoba melakukan hal-hal sederhana. Jadi itu sebabnya saya membangun Menu API yang menyederhanakan dan merampingkan bekerja dengan menu admin WordPress.
Mereka 100% kompatibel dengan struktur WordPress yang ada dan masih sangat banyak dalam alpha karena saya adalah satu-satunya yang menggunakannya. Saya yakin ada kasus penggunaan yang belum mereka tangani. Tapi saya akan memposting kode di sini untuk Anda dan orang lain untuk mencoba.
Anda dapat mengunduh file untuk dijatuhkan di direktori tema Anda di sini: wp-admin-menu-class.php dan apa yang berikut ini menunjukkan bagaimana Anda dapat memanggil fungsi dalam functions.php
file tema Anda :
<?php
require_once('wp-admin-menu-classes.php');
add_action('admin_menu','my_admin_menu');
function my_admin_menu() {
swap_admin_menu_sections('Pages','Posts'); // Swap location of Posts Section with Pages Section
rename_admin_menu_section('Media','Photos & Video'); // Rename Media Section to "Photos & Video"
delete_admin_menu_section('Links'); // Get rid of Links Section
$movie_tags_item_array = get_admin_menu_item_array('Movies','Movie Tags'); // Save off the Movie Tags Menu
update_admin_menu_section('Movies',array( // Rename two Movie Menu Items and Delete the Movie Tags Item
array('rename-item','item'=>'Movies','new_title'=>'List Movies'),
array('rename-item','item'=>'Add New','new_title'=>'Add Movie'),
array('delete-item','item'=>'Movie Tags'),
));
copy_admin_menu_item('Movies',array('Actors','Add New')); // Copy the 'Add New' over from Actors
renamed_admin_menu_item('Movies','Add New','Add Actor'); // Rename copied Actor 'Add New' to 'Add Actor
add_admin_menu_item('Movies',array( // (Another way to get a 'Add Actor' Link to a section.)
'title' => 'Alt Add Actor ',
'slug' => 'post-new.php?post_type=actor',
), array(// Add Back the Movie Tags at the end.
'where'=>'end'
));
add_admin_menu_item('Movies',$movie_tags_item_array,array(// Add Back the Movie Tags at the end.
'where'=>'end'
));
delete_admin_menu_section('Actors'); // Finally just get rid of the actors section
}
Terlebih lagi, fungsi-fungsi ini bahkan sedang dipertimbangkan (sebagai basis) untuk dimasukkan dalam WordPress 3.1 jadi jika kita beruntung ini bahkan mungkin menjadi standar!
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 dalamwp-admin/menu.php
.Jadi untuk memuat sistem menu,
admin.php
hanyarequire
smenu.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:Dasbor, misalnya, adalah:
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: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 bernamacustom_menu_order
... filter ini selalu dikembalikanfalse
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: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 :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.
sumber
$
pada nama variabel ... (Jawaban yang bagus) ..Saya menyadari ini adalah utas lama, tetapi saya pikir ini layak diperbarui dengan solusi yang jauh lebih mudah. Harap dicatat bahwa ini berfungsi dengan 3.5 dan belum diuji dengan versi lain. Kode berikut dapat ditempatkan di plugin atau file functions.php.
Lihat: http://codex.wordpress.org/Plugin_API/Filter_Reference/menu_order . Dimodifikasi sedikit agar sesuai dengan kebutuhan poster asli (walaupun, saya harap dia menemukan solusi sekarang ...).
Semua item dalam menu admin yang tidak terdaftar di sini tidak akan dihapus. Mereka akan ditambahkan ke bagian bawah menu.
sumber
Saya mengerti Anda tidak ingin menggunakan plugin, tetapi untuk kesederhanaan murni, coba plugin Admin Menu Editor oleh Janis Elsts. Atur ulang menu admin Anda sesuka Anda; juga dapat menyembunyikan item menu.
sumber
Untuk memindahkan item menu, saya suka menggunakan
$menu
variabel Global .Misalnya, jika saya ingin memindahkan menu "Halaman" ke bagian bawah menu, saya akan menggunakan ini di dalam
functions.php
atau plugin:dan jika saya ingin menukar menu Posting dan Tautan:
Sudah menggunakan trik ini sebentar, baru saja diuji dengan WP 3.4.1
sumber
admin_menu_items
fungsi yang diperbaiki dengan menggantinya denganunset($menu[20]);
Luar biasa. Terima kasih banyak. Saya hanya memasukkan beberapa baris kode ke functions.php saya
Ditambah menempatkan wp-admin-menu-class.php di folder tema saya dan sekarang tombol 'posting' diganti dengan tombol 'halaman'.
Saya harap ini akan menjadi bagian dari inti segera dan dengan cara sehingga kita tidak perlu menulis seluruh menu dalam suatu fungsi untuk hanya memesan ulang dua tombol.
Sebenarnya agak sulit untuk mendapatkan pesanan yang lebih spesifik untuk 4 tombol. Untuk mengubah 4 tombol menjadi: Halaman, Posting, Media, Tautan Saya perlu menggunakan kode berikut:
sumber