İşte WordPress yönetici menüsünün nasıl oluşturulduğuna dair hızlı bir adım - add_menu_page
API ile konuşmuyorum , gerçek varsayılan WordPress menüsünü kastediyorum.
Menü Dosyasını Arama
Menü, belli ki, tarafından yüklenir wp-admin/admin.php
. Ancak, WordPress belgelerine dayanarak kullandığımız standart API üzerinden yüklenmedi. Aksine, tüm menü (tüm olası seçenekler, alt menüler, vb.) İçinde tanımlanmış basit bir dizi ile yüklenir wp-admin/menu.php
.
Yani, menü sistemini yüklemek için admin.php
sadece require
s menu.php
WordPress 3.0 satır 99 civarında ....
Menüyü Yükleme
Menünün kendisi global dizide saklanır $menu
. Satır içi belgelere göre, menü dizisinde şu öğeler bulunur:
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
Pano, örneğin:
$menu[2] = array( __('Dashboard'), 'read', 'index.php', '', 'menu-top menu-top-first menu-icon-dashboard', 'menu-dashboard', 'div' );
Dosya, her menü öğesini gözden geçirir ve diziye yükler ve tüm alt menü öğelerini $submenu
, üst menünün URL'sini temel alan dizinleri adı verilen bir diziye yükler . Böylece, Dashboard'un "Dashboard" adlı alt menü maddesi şöyledir:
$submenu[ 'index.php' ][0] = array( __('Dashboard'), 'read', 'index.php' );
Sistem tüm menüleri yüklemeyi tamamladıktan sonra (o kadar fazla değil, ancak sistem dizini 5 veya 10 oranında değiştirir ... fark edersiniz ki, ilk menü maddesi olsa bile, Gösterge Tablosunun hala item "2" (PHP dizileri 0 dizininde başlar ... bu yüzden size biraz manevra odası sağlar).
Bu noktada, sistem çağrıları wp-admin/includes/menu.php
.
Menüde Adım Atmak
Bu üçüncü dosya her bir menü maddesi boyunca ilerler ve mevcut kullanıcıya atanan ayrıcalıklara göre menüyü kullanır veya kaldırır. İlk önce tüm alt menüler arasında dolaşır ve kullanıcının erişemediği sayfaları kaldırır. Sonra üst sayfalarda dolaşır ve aynı şeyi yapar. Ardından, menüleri kaldırmaktan kalan yinelenen ayırıcıları kaldırır.
Son olarak, menüleri atanmış menü sırasına göre sıralar.
Özel menü siparişi verme
Kanca admin_menu
, menüler ayarlandıktan sonra ancak bir şey sipariş edilmeden önce çağrılır . Böylece, tüm WordPress menü sistemini API'yi "hacklemeden" sipariş etmek mümkün.
Eylem başlatıldıktan sonra, admin_menu
özel sayfalarınız sisteme yüklenir. Bir sonraki şey, WordPress, adında bir filtreyi kontrol ediyor custom_menu_order
... Bu filtre her zaman döndürülürfalse
ve WordPress'e özel bir sipariş kullanmak isteyip istemediğinizi söyler.
Bayrağı true
yerine koymak ve açık menü sırasını tanımlamak için temanıza aşağıdakileri ekleyin :
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');
Tüm menüler için istediğiniz sırayı belirtin (menü yükleme dosyasına referanslar sağladım, böylece bir dosya adı listesi edinebilirsiniz) ve bu onunla ilgilenmelidir.
EDIT (21.02.2010):
Bu yöntemi kullanarak özel bir yazı türünün düzenleme ekranının sırasını belirlemek için, düzenleme ekranının URL adresini bilmeniz gerekir. Ben çoğu durumda, olacakhttp://blog.url/wp-admin/edit.php?post_type=POST_TYPE
. Bu, WordPress’in sitenize (kök dizinine veya bir alt klasöre kurulmuşsa) nasıl kurulduğuna ve kullanmakta olduğunuz özel gönderi tipine bağlıdır.
Örneğin...
'Yığın Değişim Soruları için özel bir gönderi türünüz olduğunu ve editörün doğrudan gösterge panosu simgesinin altındaki gösterge panosu ile aynı bölümde görünmesini istediğinizi varsayalım. Temanın functions.php
dosyasında aşağıdaki kodu kullanırsın :
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');
Menünün geri kalanı etkilenmeyecek, ancak özel düzenleme sayfanız gösterge tablosu ile aynı bölüme taşınacak ve hemen altında görünecektir. Bunu, özel yazı türlerinizi yönetici menüsünün herhangi bir bölümüne taşımak ve bunları herhangi bir sıraya koymak için kullanabilirsiniz. Standart menü öğelerini de aynı şekilde hareket ettirebilirsiniz.
Verilen bölümdeki tüm menü öğelerinin sırasını belirttiğinizden emin olun , aksi halde menünüz beklenmedik bir tuhaflığa maruz kalabilir.