Menu html:

<ul class="nav navbar-nav col-md-6 center-block navbar-nav_main"> <li class="active nav-item"><a href="#" class="nav-link">Главная</a></li> <li class="nav-item"><a href="#" class="nav-link">...</a></li> <li class="nav-item"><a href="#" class="nav-link">Контакты</a></li> </ul> 

In header.php, respectively, display:

 <?php if ( has_nav_menu( 'primary' ) ) : ?> <?php wp_nav_menu( array( 'theme_location' => 'primary', 'menu_class' => 'nav navbar-nav col-md-6 center-block navbar-nav_main', 'container' => 'ul' ) ); ?> <?php endif; ?> 

Displays a menu with its classes for li ( menu-item ), and you need a class namely nav-item and for a need a class namely nav-link .

PS: Do not offer the option through the admin panel. I use bootstrap 4. Only I disassemble wp.

    3 answers 3

     function add_classes_on_li($classes, $item, $args) { $classes[] = 'test_class'; return $classes; } add_filter('nav_menu_css_class','add_classes_on_li',1,3); 

    A source

    You can try bs4navwalker if you need more than just one class to add.

      Solved the issue using the 'walker' .

      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 ); } } 

      header.php:

        <?php if ( has_nav_menu( 'primary' ) ) : ?> <?php wp_nav_menu( array( 'theme_location' => 'primary', 'menu_class' => 'nav navbar-nav col-md-6 center-block navbar-nav_main', 'container' => 'ul', 'walker' => new mainMenuWalker () ) ); ?> <?php endif; ?> 

        For this there is a function wp_get_nav_menu_items( $menu ) .

        Example:

         $menu_name = 'custom_menu_slug'; if( $locations = get_nav_menu_locations() && isset($locations[ $menu_name ]) ){ $menu = wp_get_nav_menu_object( $locations[ $menu_name ] ); // получаем ID $menu_items = wp_get_nav_menu_items( $menu ); // получаем элементы меню // создаем список $menu_list = '<ul id="menu-' . $menu_name . ' class="nav navbar-nav col-md-6 center-block navbar-nav_main"'>'; foreach ( (array) $menu_items as $key => $menu_item ){ $menu_list .= '<li class="nav-item"><a href="' . $menu_item->url . ' class="nav-link"">' . $menu_item->title . '</a></li>'; } $menu_list .= '</ul>'; } else $menu_list = '<ul><li>Меню "' . $menu_name . '" не определено.</li></ul>'; 
        • A piece of code is not completely ripped out, well, thanks for the function. - HamSter