Robię swój pierwszy niestandardowy walker, aby zbudować menu akordeonu. Na początek skorzystałem z tego przykładu: http://bitacre.com/2025/custom-nav-menu-walker-for-wordpress-themes
Istnieją dwie funkcje. Najpierw start_lvl, a następnie start_el.
W start_el identyfikator get jest implementowany przez $ item-> ID. Czy ktoś wie, jak mogę to zrobić również w start_lvl? Muszę nadać (otaczającej nawigacji niższego poziomu) identyfikator, aby można go było zwinąć w menu akordeonu.
Próbuję wygenerować coś takiego:
<a href="#collapse2">Titel 2</a>
<ul id="collapse2">Lower Level Menu 2</ul>
<a href="#collapse3">Titel 3</a>
<ul id="collapse3">Lower Level Menu 3</ul>
Mój kod dla funkcji start_lvl:
// add id's and classes to ul sub-menus
function start_lvl( &$output, $depth, $item ) {
// depth dependent classes
$indent = ( $depth > 0 ? str_repeat( "\t", $depth ) : '' ); // code indent
$display_depth = ( $depth + 1); // because it counts the first submenu as 0
$pgid = ; // How to get ID in here??
$classes = array(
'sub-menu',
( $display_depth == 1 ? 'accordion-body collapse' : '' ),
( $display_depth % 2 ? 'menu-odd' : 'menu-even' ),
( $display_depth >=2 ? 'sub-sub-menu' : '' ),
'menu-depth-' . $display_depth
);
$ids = array(
'collapse' . $pgid
);
$class_names = implode( ' ', $classes );
$id_name = implode( ' ', $ids );
// build html
$output .= "\n" . $indent . '<ul id="' . $id_name . '" class="' . $class_names . '">' . "\n";
}
źródło
Miałem podobny problem i rozwiązałem go za pomocą zmiennej statycznej wewnątrz klasy:
A potem w „display_element” zwiększyłem zmienną:
W moim kodzie odwołałem się następnie do funkcji start_lvl mniej więcej tak:
To nie używa identyfikatora strony, ale używa unikalnego identyfikatora dla instrukcji UL, do których można odwoływać się w javascript.
BTW - Jest to naprawdę przydatne w przypadku zagnieżdżonych akordeonów lub klikalnych rozwijanych menu rozwijanych w motywie Roots za pomocą Bootstrap do aplikacji mobilnych.
źródło
Możesz użyć następującego filtra w swojej
start_el
funkcji i pogrubić swój argument wstart_lvl
funkcji.Daj mi znać, czy to działa.
źródło
Możesz po prostu dodać $ page do argumentu niestandardowego walkera:
Wypróbuj powyższe, a następnie przed wywołaniem wp_list_pages () dodaj niestandardową klasę walkera:
Następnie w argumentach dla stron wp_list_pages:
Sprawdź i sprawdź, czy wyjście Walkera jest czerwone.
źródło