This question has already been answered:

I use the wp_nav_menu function wp_nav_menu Here is the code:

 if (function_exists('wp_nav_menu')) wp_nav_menu(array( 'theme_location' => 'header_menu', // располоТСниС мСню Π² Ρ‚Π΅ΠΌΠ΅, Π²Ρ‹Π²Π΅Π»ΠΈ header_menu 'menu_class' => 'menu__ul menu__ul-pos', 'container' => '', 'container_class' => '', 'link_before' => '<li class="menu__li menu__li-pos">', 'link_after' => '</li>', )); 

It would seem all is well, and the menu output is there, but the function creates 2 menu items each.

 <ul id="menu-menu" class="menu__ul menu__ul-pos"> <li id="menu-item-36" class="menu-item menu-item-type-custom menu-item-object-custom current-menu-item current_page_item menu-item-home menu-item-36"><a href="/"></a></li> <li class="menu__li menu__li-pos"><a href="/">Главная</a></li> <li id="menu-item-37" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-37"><a href="/sample-page/"></a></li> <li class="menu__li menu__li-pos"><a href="/sample-page/">ΠŸΡ€ΠΈΠΌΠ΅Ρ€ страницы</a></li> <li id="menu-item-34" class="menu-item menu-item-type-post_type menu-item-object-post menu-item-34"><a href="/2016/10/12/mdl-website/"></a></li> <li class="menu__li menu__li-pos"><a href="/2016/10/12/mdl-website/">MDL website</a></li> <li id="menu-item-35" class="menu-item menu-item-type-post_type menu-item-object-post menu-item-35"><a href="/2016/10/12/sunt-nulla/"></a></li> <li class="menu__li menu__li-pos"><a href="/2016/10/12/sunt-nulla/">Sunt nulla</a></li> </ul> 

One item with the text and classes of my item, and the second item is empty with its classes. How to fix it, I do not want to use WP classes.

Reported as a duplicate by rjhdby , aleksandr barakin , Bald , user207618, Streletz on Oct 15 '16 at 11:30 .

A similar question was asked earlier and an answer has already been received. If the answers provided are not exhaustive, please ask a new question .

1 answer 1

I did it myself with the help of the 'walker' :

header.php:

 <?php if ( has_nav_menu( 'primary' ) ) : ?> <?php wp_nav_menu( array( 'theme_location' => 'header_menu', 'menu_class' => 'nav_menu_ul', 'container' => 'ul', 'walker' => new mainMenuWalker () ) ); ?> <?php endif; ?> 

functions.php:

 class mainMenuWalker extends Walker_Nav_Menu { function start_el(&$output, $item, $depth, $args) { global $wp_query; /* * НСкоторыС ΠΈΠ· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° $item * ID - ID самого элСмСнта мСню, Π° Π½Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ½ ссылаСтся * menu_item_parent - ID Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ элСмСнта мСню * classes - массив классов элСмСнта мСню * post_date - Π΄Π°Ρ‚Π° добавлСния * post_modified - Π΄Π°Ρ‚Π° послСднСго измСнСния * post_author - ID ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, добавившСго этот элСмСнт мСню * title - Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ элСмСнта мСню * url - ссылка * attr_title - HTML-Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ title ссылки * xfn - Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ rel * target - Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ target * current - Ρ€Π°Π²Π΅Π½ 1, Ссли являСтся Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ элСмСнтов * current_item_ancestor - Ρ€Π°Π²Π΅Π½ 1, Ссли Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ являСтся Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ элСмСнт * current_item_parent - Ρ€Π°Π²Π΅Π½ 1, Ссли Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ являСтся Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ элСмСнт * menu_order - порядок Π² мСню * object_id - ID ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° мСню * type - Ρ‚ΠΈΠΏ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° мСню (таксономия, пост, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎ) * object - какая это таксономия / ΠΊΠ°ΠΊΠΎΠΉ Ρ‚ΠΈΠΏ поста (page /category / post_tag ΠΈ Ρ‚ Π΄) * type_label - Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° с Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ (Π ΡƒΠ±Ρ€ΠΈΠΊΠ°, Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π°) * post_parent - ID Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ поста / ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ * post_title - Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» Ρƒ поста, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ Π±Ρ‹Π» Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Π² мСню * post_name - ярлык, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» Ρƒ поста ΠΏΡ€ΠΈ Π΅Π³ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ Π² мСню */ $indent = ( $depth ) ? str_repeat( "\t", $depth ) : ''; /* * Π“Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ строку с CSS-классами элСмСнта мСню */ $class_names = $value = ''; $classes = empty( $item->classes ) ? array() : (array) $item->classes; $classes[] = 'menu-item-' . $item->ID; // функция join ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ массив Π² строку $class_names = join( ' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item, $args ) ); $class_names = ' class="nav-item"'; /* * Π“Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ ID элСмСнта */ $id = apply_filters( 'nav_menu_item_id', 'menu-item-'. $item->ID, $item, $args ); $id = strlen( $id ) ? ' id="' . esc_attr( $id ) . '"' : ''; /* * Π“Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ элСмСнт мСню */ $output .= $indent . '<li' . $id . $value . $class_names .'>'; // Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ элСмСнта, title="", rel="", target="" ΠΈ href="" $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 ) .'"' : ''; // ссылка ΠΈ околоссылочный тСкст $item_output = $args->before; $item_output .= '<a class="nav-link"'. $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 ); } } 

I think you can customize for yourself.