您不需要使用Walker从nav菜单项中删除类。有一个过滤器,nav_menu_css_class
可用于修改菜单项上的类。
过滤应用于菜单项列表项元素的CSS类。
例如,这将从所有菜单项中删除类:
add_filter( \'nav_menu_css_class\', \'__return_empty_array\' );
但您不想这样,您只想删除使用特定助行器的菜单的类。传递给此筛选器回调的参数之一是
$args
, 其中包含输出菜单时使用的参数。这将包括使用的助行器。因此,在对函数的回调中,您可以检查Walker并删除所有属于您的类:
function wpse_309490_nav_menu_css_class( $classes, $item, $args, $depth ) {
if ( is_a( $args->walker, \'My_Walker_Nav_Menu\' ) ) {
$classes = [];
}
return $classes;
}
add_filter( \'nav_menu_css_class\', \'wpse_309490_nav_menu_css_class\', 10, 4 );
不过,在您的示例标记中,您的顶级项目似乎有一个类,并且有一个自定义类。在这种情况下,您可以使用
$depth
用于为顶级项添加类而不为其他项添加类的参数:
function wpse_309490_nav_menu_css_class( $classes, $item, $args, $depth ) {
if ( is_a( $args->walker, \'My_Walker_Nav_Menu\' ) ) {
if ( $depth === 0 ) {
$classes = [\'d-inline-block\'];
} else {
$classes = [];
}
}
return $classes;
}
add_filter( \'nav_menu_css_class\', \'wpse_309490_nav_menu_css_class\', 10, 4 );