我想从2 lvl深度删除一个类,从ul class=“sub”.How的li标记中删除一个类,我可以使用Walker完成这个任务吗?
About
Mission & vision
Mission & vision
Mission & vision
Mission & vision
Mission & vision
Mission & vision
Mission & vision
For patients
Activities
Project
Event
'primary-nav',
'menu_class' => 'navigation d-block',
'walker' => new My_Walker_Nav_Menu()
));
?>发布于 2018-07-25 15:04:34
您不需要使用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 );https://wordpress.stackexchange.com/questions/309490
复制相似问题