start_el()
должна получить эту информацию в своем $args
параметре, но, похоже, WordPress заполняет$args
ее только в том случае, если это массив , а для пользовательских меню навигации это объект. Об этом сообщается в билете Trac . Но нет проблем, вы можете заполнить это самостоятельно, если вы также переопределите display_element()
метод в своем пользовательском обходчике (потому что это самый простой способ получить доступ к массиву дочерних элементов):
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 ) {
// ...
}
}
Обновление: Начиная с WordPress 3.7 (октябрь 2013 г.), классы CSS были добавлены для обозначения дочерних элементов меню и страниц в меню тем - нет необходимости использовать пользовательский обходчик, как это делается в ядре WordPress.
Классы CSS названы
menu-item-has-children
иpage_item_has_children
.Для полного решения для любого, кто спешит (кредит на предыдущий ответ Яна Фабри), см. Полную реализацию ниже.
Выведите навигацию в шаблон вашей темы:
Затем включите в свою тему следующее
functions.php
:Результирующий вывод HTML будет выглядеть следующим образом:
Для получения дополнительной информации об использовании класса Walker в WordPress см. Понимание класса Walker .
Наслаждайтесь!
источник
Эта функция именно то, что вы хотите иметь. Он также показывает вам довольно эффективный способ изменения пунктов меню навигации. Кроме того, вы можете открыть его для более сложных (например, дочерняя тема) функций через фильтр элементов:
И да, почти во всех случаях нет необходимости в обычном ходунке.
источник
если вы хотите сделать выпадающий список, вы можете сделать это только с помощью CSS. Создавая пользовательскую навигацию в WP с детьми, WordPress автоматически назначает класс .sub-menu для дочернего ul. Попробуйте этот CSS
Возможно, вы захотите добавить jQuery, чтобы немного оживить его, но это должно дать вам рабочее раскрывающееся меню.
источник
источник