Wraz z wyjściem wersji 3.0 system WordPress wzbogacił się o nową opcję, możliwość tworzenia wielopoziomowych menu z dowolnych elementów: linków do kategorii, stron czy odnośników zewnętrznych. Ten tutorial pokaże jak wzbogacić naszą skórkę do WordPressa o możliwość obsługi tej opcji oraz jak to wszystko dobrze skonfigurować.
Rejestracja menu
Zaczynamy od edycji pliku functions.php który znajdziemy w folderze wp-content/themes/(nazwa skórki). Musimy w tym pliku zainicjować menu. Robi się to dosyć prosto. Wystarczy na jego końcu tuż przed znacznikiem ?> dopisać taki krótki skrypt:
add_action( 'init', 'rejestracja_menu' );
function rejestracja_menu(){
register_nav_menus( array(
'topmenu' => __('Menu górne'),
'bocznemenu' => __('Menu główne'),
));
}
W powyższym kodzie najpierw dodaliśmy zdarzenie polegające na wywołaniu funkcji rejestracja_menu podczas generowania strony a następnie zdefiniowaliśmy ciało tej funkcji. Użyliśmy w niej funkcji register_nav_menus() która rejestruje jedno lub więcej menu na podstawie przekazanej jej tablicy. W tablicy umieściliśmy dwa menu. Pierwsze o nazwie kodowej topmenu i drugie bocznemenu. Użytkownikowi będą się one wyświetlać kolejno jako Menu górne i Menu główne. Nazwy kodowe istnieją po to by uniknąć problematycznych polskich ogonków i białych znaków. Jeśli chcielibyśmy zdefiniować tylko jedno menu możemy także skorzystać z funkcji register_nav_menu której używa się tak:
register_nav_menu( 'moje-menu', __( 'Menu na stronie' ) );
Umieszczanie menu w skórce
Aby wyświetlić menu na stronie wstawiamy w odpowiednie miejsce w kodzie krótką instrukcję
<?php wp_nav_menu('bocznemenu'); ?>
Jako argument wystarczy podać nazwę kodową wcześniej zdefiniowanego menu. Chętni mogą się jednak pobawić dodatkowymi opcjami. Można np. ustawić w jaki element ma być włożone menu (domyślnie jest wewnątrz diva) oraz jaką ma mieć klasę. Poniższy kod ustawia je tak by było ono wyświetlane bez kontenera a element ul będzie miał klasę mojemenu. Należy pamiętać, że po dodaniu dodatkowych ustawień inaczej definiuje się które menu ma być wyświetlane w tym miejscu.
<?php wp_nav_menu( 'menu=bocznemenu&container=&menu_class=mojemenu' ); ?>
Oczywiście opcji jest o wiele, wiele więcej. Wszystkie do przejrzenia w dokumentacji tej funkcji.
Kompatybilność wsteczna
Na koniec zajmijmy się problemem kompatybilności. Może się on pojawić gdy nie wiemy czy nasza skórka będzie uruchamiana także na wersjach WordPressa wcześniejszych niż 3.0 gdzie funkcje takie jak wp_nav_menu zwyczajnie nie działają. Wtedy przydałoby się by zamiast menu nawigacyjnego pojawiła się zwyczajnie lista stron w danym serwisie. Na szczęście łatwo takie coś wykonać. Wystarczy jedna instrukcja warunkowa w części odpowiedzialnej za wyświetlanie menu:
if ( function_exists( 'wp_nav_menu' ) )
wp_nav_menu( 'topemenu' );
else
wp_page_menu( 'show_home=Strona główna&menu_class=pagemenu' );
}



„Aby wyświetlić menu na stronie wstawiamy w odpowiednie miejsce w kodzie krótką instrukcję”
1. Pyt. gdzie jest to odpowiednie miejsce?
Odpowiednie miejsce to te w którym chcemy wyświetlać nasze menu np w pliku header.php tu pod kodem wyświetlającym logo. Nie można tego dokładnie określić gdyż to zależy od budowy skórki. Warto tu wspomnieć, że po dopisaniu intrukcji w pliku functions.php w widgetach pojawi się nam także nowy moduł pozwalający wyświetlić nasze menu w sidebarze.
Hmm… a jak zrobić, aby była możliwość zarządzania menu z poziomu innego niż admina, np. redaktora? Nie widać tego. Czy ktoś może mi pomóc?
Da się ale to temat na zupełnie inny poradnik. Zapytaj na forum wordpress.org.pl. Ja postaram się sprawdzić i może w najbliżyszym czasie opiszę tą kwestię.