使用Walker从<li>中删除类

时间:2018-07-25 作者:TestimiUEB

我想从ul class=“sub-ul”的li标签中删除2级深度的一个类。我怎样才能用Walker做到这一点?

<ul class="navigation d-block">
                                <li class="d-inline-block">
                                    <a href="#" class="active">About</a>
                                    <ul class="sub-ul">
                                        <li><a href="#">Mission & vision</a></li>
                                        <li><a href="#">Mission & vision</a></li>
                                        <li><a href="#">Mission & vision</a></li>
                                        <li><a href="#">Mission & vision</a></li>
                                        <li><a href="#">Mission & vision</a></li>
                                        <li><a href="#">Mission & vision</a></li>
                                        <li><a href="#">Mission & vision</a></li>
                                    </ul>
                                </li>
                                <li class="d-inline-block">
                                    <a href="#">For patients</a>
                                </li>
                                <li class="d-inline-block">
                                    <a href="#">Activities</a>
                                </li>
                                <li class="d-inline-block">
                                    <a href="#">Project</a>
                                </li>
                                <li class="d-inline-block">
                                    <a href="#">Event</a>
                                </li>
                            </ul>

                           <?php
                                //Show the navigation menu
                                wp_nav_menu(array(
                                    \'theme_location\'    =>  \'primary-nav\',
                                    \'menu_class\'        =>  \'navigation d-block\',
                                    \'walker\'            =>  new My_Walker_Nav_Menu()
                                    ));
                            ?>

1 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

您不需要使用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 );

结束