Пользовательский ходок меню – удалить тег li на основе имени класса

Я использую wp_nav_menu() для отображения пунктов меню с помощью пользовательского walker .

 <ul> <li id="menu-item-799" class="menu-item ... custom-theme-class"><a href="#">custom content</a></li> <li><a href=""></a></li> <li><a href=""></a></li> ... </ul> 

Теперь я хочу изменить вывод li зависимости от имени класса. Я использую что-то вроде этого:

 function theme_function($item_output, $item, $depth, $args){ $output = ''; // Overview Menu if ( in_array( 'custom-theme-class', (array) $item->classes ) ) { $item_output = '<div class="navbar-item">'. wp_kses( $item->title, wp_kses_allowed_html( 'post' ) ) .'</div>'; } return $item_output; } add_filter('walker_nav_menu_start_el', 'theme_function', 10, 4); 

Это просто меняется

 <li ...><a href="#">custom content</a></li> 

в

 <li ..."><div class="navbar-item">custom content</div></li> 

Хотя я также хочу удалить теги li . Так оно и будет

 <div class="navbar-item">custom content</div> (without the li tags) 

В моем пользовательском меню walker я использовал следующее, но он не работает.

 function start_el(&$output, $item, $depth = 0, $args = array() , $id = 0) { ... if ( in_array( 'custom-theme-class', (array) $item->classes ) ) { $output .= ''; } else { $output .= $indent . '<li' . $id . $value . $class_names . $data_dropdown . '>'; } } function end_el(&$output, $item, $depth = 0, $args = array()) { $classes = empty($item->classes) ? array() : (array)$item->classes; $has_children = in_array('menu-item-has-children', $classes); if ($has_children && $depth == 0) { $output.= "</div>\n"; } if ( in_array( 'custom-theme-class', (array) $item->classes ) ) { $output .= ''; } else { $output.= "</li>\n"; } } 

Теги li все еще показывают, когда используется меню с custom-theme-class CSS класса пользовательского типа.

Что мне не хватает? Буду признателен за любую оказанную помощь.

У вас включена регистрация ошибок? Если вы используете последнюю версию WP, это должно вызывать ошибку, поскольку start_el и end_el являются публичными функциями.

Кроме того, если вы используете пользовательский ходок, вы должны использовать только ходунок, а не вашу дополнительную тему.

 class wpseWalker extends Walker_Nav_Menu { public function start_el(&$output, $item, $depth = 0, $args = array(), $id = 0) { $classes = empty( $item->classes ) ? array() : (array) $item->classes; $classes[] = 'menu-item-' . $item->ID; if(in_array('custom-theme-class', $classes) { $output .= '<div class="navbar-item">' . $value; } else { $output .= $indent . '<li' . $id . $value . $class_names . $data_dropdown . '>'; } } public function end_el( &$output, $item, $depth = 0, $args = array() ) { $classes = empty( $item->classes ) ? array() : (array) $item->classes; $classes[] = 'menu-item-' . $item->ID; if(in_array('custom-theme-class', $classes) { $output .= "</div>\n"; } else { $output .= "</li>\n"; } } }