首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Walker从<li>中删除类

使用Walker从<li>中删除类
EN

WordPress Development用户
提问于 2018-07-25 08:27:55
回答 1查看 1.8K关注 0票数 0

我想从2 lvl深度删除一个类,从ul class=“sub”.How的li标记中删除一个类,我可以使用Walker完成这个任务吗?

代码语言:javascript
复制
                                    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()
                                    ));
                            ?>
EN

回答 1

WordPress Development用户

回答已采纳

发布于 2018-07-25 15:04:34

您不需要使用Walker从nav菜单项中删除类。有一个过滤器,nav_menu_css_class,它可以用来修改菜单项上的类。

筛选应用于菜单项的列表项元素的CSS类。

例如,这将从所有菜单项中删除类:

代码语言:javascript
复制
add_filter( 'nav_menu_css_class', '__return_empty_array' );

但是您不希望这样,您只想删除使用特定游走器的菜单的类。传递给此过滤器回调的参数之一是$args,它包含在输出菜单时使用的参数。这将包括哪个沃克被使用。因此,在函数的回调中,您可以检查Walker并删除所有类(如果它是您的):

代码语言:javascript
复制
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参数为顶级项添加类,而不为其他项添加类:

代码语言:javascript
复制
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 );
票数 1
EN
页面原文内容由WordPress Development提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://wordpress.stackexchange.com/questions/309490

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档