Intereting Posts
Получает ли get_template_part () контент, если он не выполнен? Скрытие определенных панелей на приборной панели Как получить идентификатор категории из идентификатора сообщения? Отключить сообщения электронной почты для комментариев для авторов Невозможно изменить URL-адрес сайта wordpress Простые плагины для публикации информации о новых блогах? Показать цену с местоположением Geo IP 2 Адреса электронной почты для каждого пользователя Как запретить пользовательскому ходоку создавать вспомогательную навигацию для страниц, которые не являются родственниками текущей страницы? Получить постоянную связь без домена (т. Е. Получить относительную постоянную ссылку) Главное меню заменяется при создании второго меню Настройка wordpress в соответствии с темой вашего сайта Как я могу ограничить изменение параметра максимального вложенного уровня комментариев супермагазинами? Не удается сделать что-либо с ответом admin.php Пример для обновления информации пользователя с лицевой стороны

WordPress Walker – две группы?

Я использую встроенный WordPress wp_nav_menu() и пользовательский ходок для wp_nav_menu() элементов для навигационного меню wp_nav_menu() колонтитула. Я понимаю, что Уокер, по сути, пеет через навигационное меню, форматируя каждый элемент соответственно.

Для элементов с суб-навигацией я хотел бы, чтобы они содержались в элементе <li class='col-sm-2'></li> . Если элемент nav не имеет меню subnav, я бы хотел, чтобы он был сгруппирован в один элемент <li class='col-sm-2'></li> . Результат должен быть аналогичен этому (отредактирован в инструментах Chrome dev):

введите описание изображения здесь

Единственная проблема, с которой я сталкиваюсь, заключается в том, что она создает новый элемент списка для каждой основной ссылки навигации. Вот код для ходока, который я использую:

 class footer_walker_nav_menu extends Walker_Nav_Menu { // add classes to ul sub-menus function start_lvl( &$output, $depth ) { // depth dependent classes $indent = ( $depth > 0 ? str_repeat( "\t", $depth ) : '' ); // code indent $display_depth = ( $depth + 1); // because it counts the first submenu as 0 $classes = array( 'sub-menu', ( $display_depth % 2 ? 'menu-odd' : 'menu-even' ), ( $display_depth >= 2 ? 'sub-sub-menu' : '' ), 'menu-depth-' . $display_depth ); $class_names = implode( ' ', $classes ); // build html $output .= "\n" . $indent . '<ul class="' . $class_names . '">' . "\n"; } // add main/sub classes to li's and links function start_el( &$output, $item, $depth, $args ) { global $wp_query; $indent = ( $depth > 0 ? str_repeat( "\t", $depth ) : '' ); // code indent // depth dependent classes $depth_classes = array( ( $depth == 0 ? 'main-menu-item' : 'sub-menu-item' ), ( $depth >=2 ? 'sub-sub-menu-item' : '' ), ( $depth % 2 ? 'menu-item-odd' : 'menu-item-even' ), 'menu-item-depth-' . $depth ); $depth_class_names = esc_attr( implode( ' ', $depth_classes ) ); // passed classes $classes = empty( $item->classes ) ? array() : (array) $item->classes; $class_names = esc_attr( implode( ' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item ) ) ); if($depth == 0 && in_array('menu-item-has-children', $item->classes)) { // build html $output .= $indent . '<li id="nav-menu-item-' . $item->ID . '" class="col-sm-2 ' . $depth_class_names . ' ' . $class_names . '"><i class="fa fa-plus pull-right white hidden-lg hidden-md footer-nav__plus js-footer-nav"></i>'; } else { // build html $output .= $indent . '<li id="nav-menu-item-' . $item->ID . '" class="col-sm-2 ' . $depth_class_names . ' ' . $class_names . '">'; } // link attributes $attributes = ! empty( $item->attr_title ) ? ' title="' . esc_attr( $item->attr_title ) .'"' : ''; $attributes .= ! empty( $item->target ) ? ' target="' . esc_attr( $item->target ) .'"' : ''; $attributes .= ! empty( $item->xfn ) ? ' rel="' . esc_attr( $item->xfn ) .'"' : ''; $attributes .= ! empty( $item->url ) ? ' href="' . esc_attr( $item->url ) .'"' : ''; $attributes .= ' class="menu-link ' . ( $depth > 0 ? 'sub-menu-link' : 'main-menu-link' ) . '"'; $item_output = sprintf( '%1$s<a%2$s>%3$s%4$s%5$s</a>%6$s', $args->before, $attributes, $args->link_before, apply_filters( 'the_title', $item->title, $item->ID ), $args->link_after, $args->after ); // build html $output .= apply_filters( 'walker_nav_menu_start_el', $item_output, $item, $depth, $args ); } } тем class footer_walker_nav_menu extends Walker_Nav_Menu { // add classes to ul sub-menus function start_lvl( &$output, $depth ) { // depth dependent classes $indent = ( $depth > 0 ? str_repeat( "\t", $depth ) : '' ); // code indent $display_depth = ( $depth + 1); // because it counts the first submenu as 0 $classes = array( 'sub-menu', ( $display_depth % 2 ? 'menu-odd' : 'menu-even' ), ( $display_depth >= 2 ? 'sub-sub-menu' : '' ), 'menu-depth-' . $display_depth ); $class_names = implode( ' ', $classes ); // build html $output .= "\n" . $indent . '<ul class="' . $class_names . '">' . "\n"; } // add main/sub classes to li's and links function start_el( &$output, $item, $depth, $args ) { global $wp_query; $indent = ( $depth > 0 ? str_repeat( "\t", $depth ) : '' ); // code indent // depth dependent classes $depth_classes = array( ( $depth == 0 ? 'main-menu-item' : 'sub-menu-item' ), ( $depth >=2 ? 'sub-sub-menu-item' : '' ), ( $depth % 2 ? 'menu-item-odd' : 'menu-item-even' ), 'menu-item-depth-' . $depth ); $depth_class_names = esc_attr( implode( ' ', $depth_classes ) ); // passed classes $classes = empty( $item->classes ) ? array() : (array) $item->classes; $class_names = esc_attr( implode( ' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item ) ) ); if($depth == 0 && in_array('menu-item-has-children', $item->classes)) { // build html $output .= $indent . '<li id="nav-menu-item-' . $item->ID . '" class="col-sm-2 ' . $depth_class_names . ' ' . $class_names . '"><i class="fa fa-plus pull-right white hidden-lg hidden-md footer-nav__plus js-footer-nav"></i>'; } else { // build html $output .= $indent . '<li id="nav-menu-item-' . $item->ID . '" class="col-sm-2 ' . $depth_class_names . ' ' . $class_names . '">'; } // link attributes $attributes = ! empty( $item->attr_title ) ? ' title="' . esc_attr( $item->attr_title ) .'"' : ''; $attributes .= ! empty( $item->target ) ? ' target="' . esc_attr( $item->target ) .'"' : ''; $attributes .= ! empty( $item->xfn ) ? ' rel="' . esc_attr( $item->xfn ) .'"' : ''; $attributes .= ! empty( $item->url ) ? ' href="' . esc_attr( $item->url ) .'"' : ''; $attributes .= ' class="menu-link ' . ( $depth > 0 ? 'sub-menu-link' : 'main-menu-link' ) . '"'; $item_output = sprintf( '%1$s<a%2$s>%3$s%4$s%5$s</a>%6$s', $args->before, $attributes, $args->link_before, apply_filters( 'the_title', $item->title, $item->ID ), $args->link_after, $args->after ); // build html $output .= apply_filters( 'walker_nav_menu_start_el', $item_output, $item, $depth, $args ); } } 

Любая помощь будет принята с благодарностью!

Solutions Collecting From Web of "WordPress Walker – две группы?"