Mam zdefiniowane menu w WP Admin, które wygląda następująco:
Chcę móc wyświetlać wszystkie podrzędne linki na pasku bocznym za każdym razem, gdy jestem na stronie nadrzędnej. Na przykład, jeśli użytkownik jest na mojej stronie „O nas”, chcę, aby lista 4 linków podświetlonych na zielono pojawiła się na pasku bocznym.
Przejrzałem dokumentację dla wp_nav_menu () i wydaje się, że nie ma ona żadnego wbudowanego sposobu określania konkretnego węzła danego menu, który miałby być punktem początkowym podczas generowania linków.
Stworzyłem rozwiązanie dla podobnej sytuacji, które opierało się na relacjach tworzonych przez rodzica strony, ale szukam takiego, który będzie korzystał z systemu menu. Każda pomoc będzie mile widziana.
Odpowiedzi:
Wciąż o tym myślałem, więc ponownie go przejrzałem i opracowałem to rozwiązanie, które nie opiera się tak bardzo na kontekście:
Stosowanie
źródło
Walker_Nav_Menu
klasie. Jak wszystkie rzeczy w menu zbyt wiele do komentowania - zadaj nowe pytanie?wp_filter_object_list
wiersz nawp_filter_object_list( $items, array( 'object_id' => $args->submenu ), 'and', 'ID' );
@goldenapples: Twoja klasa Walker nie działa. Ale pomysł jest naprawdę dobry. Stworzyłem walkera na podstawie twojego pomysłu:
Teraz możesz użyć:
Dane wyjściowe to lista zawierająca bieżący element główny i jego elementy potomne (nie ich elementy potomne). Def: Element główny: = Element menu najwyższego poziomu, który odpowiada bieżącej stronie lub jest rodzicem bieżącej strony lub rodzicem rodzica ...
To nie odpowiada dokładnie na pierwotne pytanie, ale prawie, ponieważ wciąż istnieje element najwyższego poziomu. Jest to dla mnie w porządku, ponieważ chcę element najwyższego poziomu jako nagłówek paska bocznego. Jeśli chcesz się tego pozbyć, może być konieczne zastąpienie elementu display_element lub użycie parsera HTML.
źródło
Cześć @jessegavin :
Menu Nav są przechowywane w kombinacji niestandardowych typów postów i niestandardowych systematyk. Każde menu jest przechowywane jako termin (tj. „Informacje o menu” , znaleziony w
wp_terms
) w niestandardowej taksonomii (tj.nav_menu
Znaleziony wwp_term_taxonomy
.)Każdy element menu Nav jest przechowywany jako post
post_type=='nav_menu_item'
(tj. „O firmie” , znaleziono wwp_posts
), a jego atrybuty są przechowywane jako meta post (inwp_postmeta
) zmeta_key
prefiksem_menu_item_*
gdzie_menu_item_menu_item_parent
jest identyfikator nadrzędnego elementu menu Nav post.Zależność między menu i elementami menu jest przechowywana
wp_term_relationships
tam, gdzieobject_id
odnosi się$post->ID
do pozycji menu nawigacji i$term_relationships->term_taxonomy_id
odnosi się do menu zdefiniowanego zbiorczo wwp_term_taxonomy
iwp_terms
.Jestem prawie pewien, że byłoby to możliwe, aby zaczepić zarówno
'wp_update_nav_menu'
i'wp_update_nav_menu_item'
stworzyć menu w rzeczywistychwp_terms
i równoległym układzie stosunków wwp_term_taxonomy
iwp_term_relationships
gdzie każdy Nav elementu menu, który ma sub-Nav elementy Menu również staje się swoją własną Nav Menu.Chciałbyś także przechwycić
'wp_get_nav_menus'
(który sugerowałem dodanie do WP 3.0 w oparciu o podobną pracę, którą wykonywałem kilka miesięcy temu), aby upewnić się, że wygenerowane menu Nav nie są wyświetlane do manipulacji przez użytkownika w adminie, w przeciwnym razie naprawdę szybko zsynchronizowałeś się, a wtedy miałbyś koszmar danych.Brzmi jak fajny i użyteczny projekt, ale jest to trochę więcej kodu i testów, na które nie mogę sobie teraz pozwolić częściowo, ponieważ wszystko, co synchronizuje dane, zwykle jest PITA, jeśli chodzi o usuwanie wszystkich błędów (i ponieważ klienci płacący naciskają na mnie, aby załatwić sprawę :) Ale uzbrojony w powyższe informacje jestem dość zmotywowanym deweloperem wtyczek WordPress, który mógłby to napisać, gdyby chcieli.
Oczywiście teraz zdajesz sobie sprawę, że jeśli go kodujesz, masz obowiązek opublikować go tutaj, abyśmy wszyscy mogli skorzystać z Twojej hojności! :-)
źródło
wp_nav_menu()
, musisz sklonować menu, ponieważwp_nav_menu()
jest ściśle powiązane ze strukturą menu . Inną opcją jest skopiowaniewp_nav_menu()
kodu i dokonanie modyfikacji wymaganych do wyświetlenia jako podmenu.To jest rozszerzenie Walkera, które powinno robić to, czego szukasz:
Opierając się luźno na kodzie mfields, do którego odwoływałem się wcześniej w moim komentarzu. Podczas chodzenia po menu sprawdza tylko, czy bieżący element jest (1) bieżącym elementem menu lub (2) przodkiem bieżącego elementu menu, i rozwija poddrzewa pod nim tylko wtedy, gdy spełniony jest jeden z tych warunków . Mam nadzieję, że to Ci odpowiada.
Aby z niego skorzystać, wystarczy dodać argument „walker” podczas wywoływania menu, tj .:
źródło
$top_level_elements
i dodać własny test przed połączeniem z$this->display_element
.depth
parametr do wywołaniawp_nav_menu
, na wypadek gdyby Twój motyw przekroczył domyślną wartość 0 (pokaż wszystkie poziomy)?Aktualizacja: Zrobiłem to we wtyczce. Pobierz tutaj .
Musiałem to rozwiązać sam i ostatecznie napisałem filtr wyników wyszukiwania menu. Pozwala
wp_nav_menu
normalnie używać , ale wybierz podsekcję menu na podstawie tytułu elementu nadrzędnego. Dodajsubmenu
parametr do menu w następujący sposób:Możesz nawet przejść kilka poziomów w głąb, wprowadzając ukośniki:
Lub jeśli wolisz z tablicą:
Używa ślimakowej wersji tytułu, co powinno sprawić, że wybaczy takie litery, jak wielkie litery i interpunkcja.
źródło
$loc = split( "/", $loc );
we wtyczce na$loc = preg_split( "~/~", $loc );
Przygotowałem dla siebie następującą klasę. Znajduje najwyższego nadrzędnego elementu nawigacyjnego bieżącej strony lub możesz nadać mu docelowy górny identyfikator nawigacji w konstruktorze walkera.
Nawigacja Nav:
źródło
@davidn @hakre Cześć, mam brzydkie rozwiązanie bez parsera HTML lub przesłonięcia elementu display_element.
źródło
Dane wyjściowe menu nawigacyjnego zawierają wiele klas dla bieżącego elementu, przodka bieżącego elementu itp. W niektórych sytuacjach byłem w stanie zrobić to, co chcesz zrobić, pozwalając na wyjście całego drzewa nawigacyjnego, a następnie używając css, aby go pauzować tylko dzieci bieżącej strony itp.
źródło
Zrobiłem zmodyfikowany walker, który powinien pomóc! Nie idealnie - pozostawia kilka pustych elementów, ale robi to samo. Modyfikacja to w zasadzie te bity $ current_branch. Mam nadzieję, że to komuś pomaga!
}
źródło
Sprawdź kod w mojej wtyczce lub użyj go do swoich celów;)
Ta wtyczka dodaje ulepszony widżet „Menu nawigacji”. Oferuje wiele opcji, które można ustawić w celu dostosowania wyjścia niestandardowego menu za pośrednictwem widżetu.
Dodatki zawarte:
wybranego elementu (opcja dołączenia elementu nadrzędnego).
http://wordpress.org/extend/plugins/advanced-menu-widget/
źródło