Intereting Posts
Loop Offset для тегов на основе «Связанные сообщения» Совместное использование папки wp-контента по различным установкам WordPress multisite Пользовательская таксономия и Tax_Query Фильтр WordPress template_include не работает должным образом Как перенаправить эту форму контакта на определенную постоянную ссылку Объединение подобных функций короткого кода? WordPress | Дата не всегда отображается Как я перечисляю многопользовательских пользователей только для текущего сайта Как прокомментировать тему WordPress? Локально? Через FTP? more types plugin – отображать все сообщения типа post на странице Нужна помощь в создании сайта, на котором пользователь может добавлять продукты Настройка запланированных задач (для запуска сценариев) Выполнить функцию, когда администратор изменяет роль пользователя Добавить пользовательский тип элемента меню Добавление богатого текстового редактора в виджет – в частности, CKEditor

Предоставляет ли расширение несколько Nav_Menu_Walkers разрешение вложенных меню?

По сути, я пытаюсь добавить несколько навигационных меню, и я довольно близко, но я просто не могу найти правильный путь для решения моей проблемы …

Я использую вариант меню Stu Nichols CSS …

Код лучше объясняет 😉

Отношения, необходимые для создания этого меню, будут иметь элементы верхнего уровня как элементы списка, дочерние контейнеры как divs, а также дочерние элементы и siblings {nth child} как uls … Таким образом, структура будет следующей:

<li><a href='#'>parent</a> <div>child-container <ul><!--1st Child --> <li>item</li> ... </ul> <ul><!--Sibling --> <li>item</li> ... </ul> <ul><!--Sibling --> <li>item</li> ... </ul> </div> </li> 

Моя текущая мысль состоит в том, чтобы добавить дополнительный nav_menu_walker для создания списков подменю … Однако я не уверен, могу ли я передавать несколько ходунков в качестве аргументов в wp_nav_menu … IE … ASSERT

  $menu_params = array ( 'theme_location' => 'primary', 'menu' => 'Main Menu', 'container' => 'div', 'container_class' => 'nav', 'container_id' => FALSE, 'menu_class' => FALSE, 'menu_id' => FALSE, 'echo' => TRUE, 'fallback_cb' => 'wp_page_menu', 'before' => FALSE, 'after' => FALSE, 'link_before' => FALSE, 'link_after' => FALSE, 'items_wrap' => "\n\t" . '<ul>%3$s</ul>' . "\n", 'depth' => 0, 'walker' => new Top_Nav_Menu_Walker() <!-- Can I Add another Walker Here? --> ); echo "\t\t<div id=\"navigation\">\n\t\t\t"; wp_nav_menu( $menu_params ); echo "\t\t</div>\n"; } 

Чтобы получить отношения parent-> child-container, я просто добавил div и ul в функцию start_lvl … Вот где у меня возникают проблемы с определением того, как я могу создавать несколько родных братьев …

 function start_lvl( &$output, $depth = 0, $args = array()) { $indent = str_repeat("\t", $depth); $output .= "\n$indent<div>\n"; $output .= "\n$indent<ul>\n"; } 

Чтобы добавить классы в элементы привязки верхнего уровня, у меня есть пользовательский ходок. В функции start_el я вводил классы для элементов привязки на основе родительского класса.

 function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) { global $wp_query; $indent = ( $depth ) ? str_repeat( "\t", $depth ) : ''; $class_names = $value = ''; $classes = empty( $item->classes ) ? array() : (array) $item->classes; $classes[] = 'menu-item-' . $item->ID; $class_names = join( ' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item, $args ) ); $class_names = $class_names ? ' class="' . esc_attr( $class_names ) . '"' : ''; $id = apply_filters( 'nav_menu_item_id', 'menu-item-'. $item->ID, $item, $args ); $id = $id ? ' id="' . esc_attr( $id ) . '"' : ''; /* inject some anchor classes */ if( $this->$depth == 0) { if ( in_array( 'two', $item->classes ) || in_array( 'three', $item->classes )) { $item->class = 'oneCol fly'; } if ( in_array( 'four', $item->classes )) { $item->class = 'twoCol fly'; } }; $output .= $indent . '<li' . $id . $value . $class_names .'>'; $output .= in_array( 'sub_nav_h4', $item->classes ) ? "\n" . $indent . "<h4>\n" : ''; $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 ) .'"' : ''; /* This 'should' always be true as WP doesn't support anchor classes */ $attributes .= ! empty( $item->class ) ? ' class="' . esc_attr( $item->class ) . '"' : ''; $item_output = $args->before; $item_output .= '<a' . $attributes .'>'; $item_output .= $args->link_before . apply_filters( 'the_title', $item->title, $item->ID ) . $args->link_after; $item_output .= '</a>'; $item_output .= $args->after; $output .= apply_filters( 'walker_nav_menu_start_el', $item_output, $item, $depth, $args ); } 

Вот структура навигации, которую я пытаюсь достичь …

 <div id="navigation"> <div class="nav"> <ul> <li class="noCol one"><a href="/">One</a> </li> <li class="threeCol two"><a class="oneCol fly" href="/two/">Two</a> <div> <ul> <li><h4><a href="#url">Egestas Sed</a></h4></li> <li><a href="#url">Consequat Leo</a></li> <li><a href="#url">Lacinia &amp; Blandit</a></li> <li><a href="#url">Interdum</a></li> <li><h4><a href="#url">Pellentesque Velit</a></h4></li> <li><a href="#url">Lacinia &amp; Blandit</a></li> <li><a href="#url">Interdum</a></li> <li><a href="#url">Donec non Fringilla</a></li> <li><a href="#url">Fusce Ullamcorper</a></li> </ul> <ul> <li><h4><a href="#url">Facilisis</a></h4></li> <li><a href="#url">Tristique</a></li> <li><a href="#url">Donec</a></li> <li><h4><a href="#url">Sapien</a></h4></li> <li><a href="#url">Purus</a></li> <li><a href="#url">Congue</a></li> <li><a href="#url">Mattis</a></li> </ul> <ul> <li><h4><a href="#url">Integer nec Diam</a></h4></li> <li><a href="#url">Morbi Eget Pharetra</a></li> <li><a href="#url">Nulla &amp; Orci</a></li> <li><a href="#url">Eget Sapien Sodales</a></li> <li><h4><a href="#url">Aenean</a></h4></li> <li><a href="#url">Velit Ligula</a></li> <li><a href="#url">Maecenas</a></li> </ul> </div> </li> <li class="threeCol three"><a class="oneCol fly" href="/three/">Three</a> <div> <ul> <li><h4><a href="#url">Egestas Sed</a></h4></li> <li><a href="#url">Consequat Leo</a></li> <li><h4><a href="#url">Pellentesque Velit</a></h4></li> <li><a href="#url">Lacinia &amp; Blandit</a></li> <li><a href="#url">Interdum</a></li> <li><a href="#url">Donec non Fringilla</a></li> <li><a href="#url">Fusce Ullamcorper</a></li> </ul> <ul> <li><h4><a href="#url">Facilisis</a></h4></li> <li><a href="#url">Tristique</a></li> <li><a href="#url">Donec</a></li> <li><h4><a href="#url">Sapien</a></h4></li> <li><a href="#url">Purus</a></li> <li><a href="#url">Congue</a></li> <li><a href="#url">Mattis</a></li> </ul> <ul> <li><h4><a href="#url">Integer nec Diam</a></h4></li> <li><a href="#url">Morbi Eget Pharetra</a></li> <li><a href="#url">Nulla &amp; Orci</a></li> <li><a href="#url">Eget Sapien Sodales</a></li> <li><h4><a href="#url">Aenean</a></h4></li> <li><a href="#url">Velit Ligula</a></li> <li><a href="#url">Maecenas</a></li> </ul> </div> </li> <li class="twoCol four"><a class="twoCol fly" href="/four/">Four</a> <div> <ul> <li><h4><a href="#url">Ut vel Cursus</a></h4></li> <li><a href="#url">Maecenas imperdiet </a></li> <li><a href="#url">Congue Metus</a></li> <li class="fly"><a class="fly" href="#url">Vitae Luctus</a> <ul> <li><a href="#url">Purus Pellentesque</a></li> <li><a href="#url">Pellentesque Sed</a></li> <li><a href="#url">Felis Nunc</a></li> </ul> </li> </ul> <ul> <li><h4><a href="#url">Morbi Placerat Luctus</a></h4></li> <li><a href="#url">Ut &amp; Eleifend</a></li> <li><a href="#url">Feugiat Euismod</a></li> <li><a href="#url">Tempus Condi</a></li> </ul> </div> </li> <li class="noCol five"><a href="/five/">Five</a></li> <li class="noCol six"><a href="/six/">Six</a></li> <li class="noCol seven"><a href="/seven">Seven</a></li> </ul> </div> <!--</div class="nav"> --> </div><!--</div id="navigation"> --> 

Solutions Collecting From Web of "Предоставляет ли расширение несколько Nav_Menu_Walkers разрешение вложенных меню?"

Честно говоря, я бы просто использовал одно меню, а затем применил класс CSS (в бэкэнд) к элементу навигации, которым вы хотите быть.

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

Вы можете изменить свое меню, используя walker.

 include('subMenu.php'); $menu = wp_nav_menu( array('menu' => 'YOUR-MENU-NAME','menu_class' => 'megamenu','walker' => new subMenu)); в include('subMenu.php'); $menu = wp_nav_menu( array('menu' => 'YOUR-MENU-NAME','menu_class' => 'megamenu','walker' => new subMenu)); 

создайте файл subMenu.php в папке темы, добавьте ниже код.

 <?php class subMenu extends Walker_Nav_Menu { function end_el(&$output, $item, $depth=0, $args=array()) { if( 'parent' == $item->title ){ $output .= '<div> //child-container <ul> <li><h4><a href="#url">Egestas Sed</a></h4></li> <li><a href="#url">Consequat Leo</a></li> <li><a href="#url">Lacinia &amp; Blandit</a></li> <li><a href="#url">Interdum</a></li> <li><h4><a href="#url">Pellentesque Velit</a></h4></li> <li><a href="#url">Lacinia &amp; Blandit</a></li> <li><a href="#url">Interdum</a></li> <li><a href="#url">Donec non Fringilla</a></li> <li><a href="#url">Fusce Ullamcorper</a></li> </ul> <ul> <li><h4><a href="#url">Facilisis</a></h4></li> <li><a href="#url">Tristique</a></li> <li><a href="#url">Donec</a></li> <li><h4><a href="#url">Sapien</a></h4></li> <li><a href="#url">Purus</a></li> <li><a href="#url">Congue</a></li> <li><a href="#url">Mattis</a></li> </ul> <ul> <li><h4><a href="#url">Integer nec Diam</a></h4></li> <li><a href="#url">Morbi Eget Pharetra</a></li> <li><a href="#url">Nulla &amp; Orci</a></li> <li><a href="#url">Eget Sapien Sodales</a></li> <li><h4><a href="#url">Aenean</a></h4></li> <li><a href="#url">Velit Ligula</a></li> <li><a href="#url">Maecenas</a></li> </ul> </div> '; } $output .= "</li>\n"; } }