Я делаю свой первый пользовательский ходок для создания меню аккордеона. Для начала я использовал этот пример: http://bitacre.com/2025/custom-nav-menu-walker-for-wordpress-themes
Есть две функции. Сначала start_lvl, а затем start_el.
В start_el идентификатор get реализован с помощью $ item-> ID. Кто-нибудь знает, как я могу сделать это в start_lvl? Мне нужно дать (окружающий навигацию более низкого уровня) идентификатор, чтобы я мог вызвать его свертывание в меню аккордеона.
Я пытаюсь создать что-то вроде этого:
<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>
Мой код для функции 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";
}
источник
У меня была похожая проблема, и я решил ее с помощью статической переменной внутри класса:
А затем в "display_element" я увеличил переменную:
В моем коде я тогда ссылался в функции start_lvl примерно так:
Это не использует идентификатор страницы, но он использует уникальный идентификатор для операторов UL, на который может ссылаться JavaScript.
Кстати, это действительно просто полезно для вложенных аккордеонов или кликабельных вложенных выпадающих меню в теме Roots с использованием Bootstrap для мобильных приложений.
источник
Вы можете использовать следующий фильтр в своей
start_el
функции и получить свой аргумент вstart_lvl
функции.Пожалуйста, дайте мне знать, если это работает.
источник
Вы можете просто добавить $ page к аргументу пользовательского обходчика:
Попробуйте описанное выше, а затем, прежде чем вызывать wp_list_pages (), добавьте пользовательский класс Walker:
Затем в аргументах для wp_list_pages:
Проверьте и убедитесь, что выход ходунка красный.
источник