start_el()
powinien uzyskać tę informację w swoim $args
parametrze, ale wydaje się, że WordPress wypełnia$args
ją tylko, jeśli jest tablicą , podczas gdy w niestandardowych menu nawigacyjnych jest to obiekt. Jest to zgłaszane na bilecie Trac . Ale nie ma problemu, możesz wypełnić to sam, jeśli również przesłonisz display_element()
metodę w niestandardowym walkerze (ponieważ jest to najłatwiejsze miejsce na dostęp do tablicy elementów potomnych):
class WPSE16818_Walker extends Walker_Nav_Menu
{
function display_element( $element, &$children_elements, $max_depth, $depth=0, $args, &$output )
{
$id_field = $this->db_fields['id'];
if ( is_object( $args[0] ) ) {
$args[0]->has_children = ! empty( $children_elements[$element->$id_field] );
}
return parent::display_element( $element, $children_elements, $max_depth, $depth, $args, $output );
}
function start_el( &$output, $item, $depth, $args ) {
if ( $args->has_children ) {
// ...
}
}
Aktualizacja: Począwszy od WordPress 3.7 (październik 2013 r.), Dodano klasy CSS, aby wskazać elementy menu podrzędnego i strony w menu motywów - nie trzeba używać niestandardowego walkera, ponieważ jest on załatwiany w rdzeniu WordPress.
Klasy CSS mają nazwy
menu-item-has-children
ipage_item_has_children
.Aby znaleźć kompletne rozwiązanie dla każdego, kto się spieszy (podziękowania dla poprzedniej odpowiedzi Jana Fabry'ego), zobacz pełną implementację poniżej.
Wyświetl nawigację w szablonie motywu:
Następnie dołącz do motywu następujące elementy
functions.php
:Wynikowy wynik HTML będzie przypominał:
Aby uzyskać więcej informacji na temat korzystania z klasy walkera WordPress, zobacz Opis klasy Walker .
Cieszyć się!
źródło
Ta funkcja jest dokładnie tym, co chcesz mieć. Pokazuje także całkiem skuteczny sposób modyfikowania elementów menu nawigacyjnego. Ponadto możesz go otworzyć dla bardziej zaawansowanych funkcji (np. Motywu potomnego) za pomocą filtru pozycji:
I tak, prawie w każdym przypadku nie ma potrzeby niestandardowego chodzika.
źródło
jeśli chcesz zrobić listę rozwijaną, możesz to zrobić tylko za pomocą css. utwórz niestandardową nawigację w WP z dziećmi, WordPress automatycznie przypisuje podmenu klasy do podrzędnego ul. Wypróbuj ten CSS
Możesz dodać trochę jQuery, aby trochę urozmaicić, ale to powinno dać ci działające menu rozwijane.
źródło
źródło