Проблема с пустыми атрибутами класса при запуске фильтра на nav_menu_css_class

Я использую приведенный ниже код, чтобы удалить из пользовательских меню все классы, но текущие элементы меню и текущие меню-родительские классы.

Он работает очень хорошо, однако есть одна проблема, которую я пытаюсь преодолеть. Некоторые пункты меню заканчиваются пустыми атрибутами класса:

<ul id="menu-site-menu" class="menu"> <li id="menu-item-18" class="current-menu-item "><a href="http://localhost/r23">Home</a></li> <li id="menu-item-19" class=""><a href="http://localhost/r23/about-us/">About Us</a></li> <li id="menu-item-20" class=""><a href="http://localhost/r23/contact-us/">Contact Us</a></li> </ul> 

Вероятно, это не такая большая сделка, но я бы вообще не показывал атрибут класса. Можно ли это сделать с незначительными изменениями в коде ниже?

 add_filter('nav_menu_css_class', 'clean_menu_classes', 10, 2); function clean_menu_classes($classes, $item) { $classes = array_filter( $classes, create_function( '$class', 'return in_array( $class, array( "current-menu-item", "current-menu-parent" ) );' ) ); return array_merge( $classes, (array)get_post_meta( $item->ID, '_menu_item_classes', true ) ); } 

Solutions Collecting From Web of "Проблема с пустыми атрибутами класса при запуске фильтра на nav_menu_css_class"

К сожалению, нет фильтра, который может решить эту проблему. Вы должны переопределить функцию start_el ходока . Вот исходный источник:

 $class_names = join( ' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item, $args ) ); $class_names = ' class="' . esc_attr( $class_names ) . '"'; $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 .'>'; 

Как вы можете видеть, класс всегда добавляется, и он должен быть добавлен только в том случае, если $classes не пуст