Cześć @BinaryBit:
Nic dziwnego, że jesteś trochę sfrustrowany; menu administracyjne jest jedną z najbardziej tępych i frustrujących implementacji dzięki rdzeniu WordPress. Szczerze mówiąc, nie wiem, co myśleli, kiedy zaprojektowali to w ten sposób.
@EAMann wykonał świetną robotę, wyjaśniając, jak działają menu administracyjne w WordPress (chciałbym móc to przeczytać około 4 miesiące temu ... :)
Jednak po tym, jak zorientowałem się, jak to działa, nadal nie mogłem z nim pracować, nie poświęcając wystarczająco dużo czasu, aby utrzymać głowę prosto, gdy próbowałem robić proste rzeczy. Dlatego właśnie zbudowałem API menu, które upraszcza i usprawnia pracę z menu administracyjnym WordPress.
Są w 100% kompatybilne z istniejącymi strukturami WordPress i wciąż bardzo alfa, odkąd tylko ja go używam. Jestem pewien, że istnieją przypadki użycia, których jeszcze nie obsługują. Ale opublikuję kod tutaj, abyś ty i inni mogli go wypróbować.
Możesz pobrać plik, aby upuścić go w katalogu motywu tutaj: wp-admin-menu-klas.php, a poniżej pokazano, jak możesz wywoływać funkcje w functions.php
pliku motywu :
<?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
}
Co więcej, funkcje te są nawet rozważane (jako podstawa) do włączenia do WordPress 3.1, więc jeśli będziemy mieli szczęście, mogą nawet stać się standardem!
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 wwp-admin/menu.php
.Tak więc aby załadować system menu,
admin.php
po prosturequire
smenu.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:Na przykład pulpit nawigacyjny to:
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: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 nazwiecustom_menu_order
... ten filtr jest zawsze zwracanyfalse
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: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 :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.
źródło
$
nazwy zmiennej ... (Świetna odpowiedź) ..Zdaję sobie sprawę, że to stary wątek, ale myślę, że warto zaktualizować go DUŻO łatwiejszym rozwiązaniem. Pamiętaj, że działa to z wersją 3.5 i nie zostało przetestowane z żadną inną wersją. Poniższy kod można umieścić we wtyczce lub w pliku functions.php.
Zobacz: http://codex.wordpress.org/Plugin_API/Filter_Reference/menu_order . Nieznacznie zmodyfikowany, by pasował do oryginalnego postera plakatu (mam jednak nadzieję, że do tej pory znalazł rozwiązanie ...).
Wszelkie elementy w menu administratora, które nie są tutaj wymienione, nie zostaną usunięte. Zostaną one dodane na dole menu.
źródło
Rozumiem, że nie chcesz używać wtyczki, ale dla uproszczenia wypróbuj wtyczkę Admin Menu Editor autorstwa Janis Elsts. Zmień układ menu administratora w dowolny sposób; może również ukryć pozycje menu.
źródło
Do poruszania się po menu lubię używać
$menu
zmiennej Global .Na przykład, jeśli chciałbym przenieść menu „Strony” na dół menu, użyłbym tego
functions.php
lub wtyczki:a gdybym chciał zamienić menu postów i linków:
Trochę używałem tej sztuczki, właśnie przetestowałem z WP 3.4.1
źródło
admin_menu_items
funkcji, który został naprawiony przez zastąpienie gounset($menu[20]);
Niesamowite. Dziękuję bardzo. Po prostu wstawiłem kilka wierszy kodu do swoich funkcji.php
Plus umieszczenie wp-admin-menu-klas.php w moim folderze motywów, a teraz przycisk „posty” jest zastąpiony przyciskiem „strony”.
Mam nadzieję, że wkrótce stanie się to częścią rdzenia, dzięki czemu nie będziemy musieli pisać całego menu w ramach funkcji, aby zmienić kolejność dwóch przycisków.
W rzeczywistości nieco trudniej było uzyskać bardziej szczegółowe zamówienie na 4 przyciski. Aby zmienić 4 przyciski na: Strony, Post, Media, Linki Potrzebowałem użyć następującego kodu:
źródło