Oto krótki opis budowy menu administratora WordPress - nie mówię o add_menu_page
interfejsie API, mam na myśli rzeczywiste domyślne menu WordPress.
Wywoływanie pliku menu
Menu jest oczywiście ładowane przez wp-admin/admin.php
. Ale nie jest ładowany przez standardowy interfejs API, którego używamy na podstawie dokumentacji WordPress. Całe menu (wszystkie możliwe opcje, podmenu itp.) Są ładowane za pomocą prostej tablicy, która jest zdefiniowana w wp-admin/menu.php
.
Tak więc aby załadować system menu, admin.php
po prostu require
s menu.php
... wokół linii 99 w WordPress 3.0.
Ładowanie menu
Samo menu jest przechowywane w globalnej tablicy $menu
. Zgodnie z dokumentacją on-line tablica menu zawiera następujące elementy:
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
Na przykład pulpit nawigacyjny to:
$menu[2] = array( __('Dashboard'), 'read', 'index.php', '', 'menu-top menu-top-first menu-icon-dashboard', 'menu-dashboard', 'div' );
Plik przechodzi i ładuje każdy element menu do tablicy i ładuje wszystkie jego elementy z podmenu do tablicy o nazwie $submenu
indeksującej na podstawie adresu URL menu nadrzędnego. Zatem podmenu Pulpitu nawigacyjnego o nazwie „Pulpit nawigacyjny” to:
$submenu[ 'index.php' ][0] = array( __('Dashboard'), 'read', 'index.php' );
Po zakończeniu ładowania systemu do wszystkich menu (nie ma ich zbyt wiele, ale system przechodzi przez indeks jednocześnie o 5 lub 10 ... zauważ, że pulpit nawigacyjny, mimo że jest to pierwszy element menu, jest nadal indeksowany jako pozycja „2” (tablice PHP zaczynają się od indeksu 0 ... więc daje to trochę miejsca do manewrowania).
W tym momencie system dzwoni wp-admin/includes/menu.php
.
Przechodzenie przez menu
Ten trzeci plik przechodzi przez każdą pozycję menu i, w oparciu o uprawnienia przypisane bieżącemu użytkownikowi, korzysta z menu lub go usuwa. Najpierw przechodzi przez wszystkie podmenu i usuwa strony, do których użytkownik nie ma dostępu. Następnie przechodzi przez strony nadrzędne i robi to samo. Następnie usuwa wszelkie zduplikowane separatory, które pozostały po wyeliminowaniu menu.
Na koniec sortuje menu według przydzielonej im kolejności menu.
Zamawianie niestandardowych menu
Hak admin_menu
jest wywoływany po skonfigurowaniu menu, ale zanim cokolwiek zostanie zamówione. Możliwe jest więc zamówienie całego systemu menu WordPress bez „hakowania” interfejsu API.
Po uruchomieniu akcji admin_menu
niestandardowe strony są ładowane do systemu. Następną rzeczą, która się dzieje, jest WordPress sprawdza filtr o nazwie custom_menu_order
... ten filtr jest zawsze zwracany false
i informuje WordPress, czy chcesz użyć niestandardowego zamówienia.
Dodaj do motywu następujące elementy, aby true
zamiast tego ustawić flagę i zdefiniuj wyraźną kolejność menu:
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');
Określ żądaną kolejność dla wszystkich menu (podałem odniesienia do pliku ładującego menu, abyś mógł uzyskać listę nazw plików), a to powinno się tym zająć.
EDYCJA (9.02.2010):
Aby określić kolejność ekranu edycji niestandardowego typu postu za pomocą tej metody, musisz znać adres URL ekranu edycji. W większości przypadków tak będzie http://blog.url/wp-admin/edit.php?post_type=POST_TYPE
. Zależy to od tego, jak WordPress jest skonfigurowany w Twojej witrynie (jeśli jest zainstalowany w katalogu głównym lub w podfolderze) i informacji o typie niestandardowego posta, którego używasz.
Na przykład...
Załóżmy, że masz niestandardowy typ postu „Pytania dotyczące wymiany stosu” i chcesz, aby edytor pojawiał się w tej samej sekcji co pulpit nawigacyjny bezpośrednio pod ikoną pulpitu nawigacyjnego. W functions.php
pliku motywu użyjesz następującego kodu :
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');
Reszta menu pozostanie niezmieniona, ale Twoja niestandardowa strona edycji zostanie przeniesiona do tej samej sekcji co pulpit nawigacyjny i pojawi się bezpośrednio pod nią. Możesz użyć tego, aby przenieść niestandardowe typy postów do dowolnej sekcji menu administratora i umieścić je w dowolnej kolejności. Możesz także przenosić standardowe pozycje menu w ten sam sposób.
Po prostu upewnij się, że określiłeś kolejność wszystkich pozycji menu w danej sekcji , w przeciwnym razie twoje menu może być przedmiotem nieoczekiwanej dziwności.