在wp_nav_menu中向li元素添加类

Rob*_*rto 4 wordpress menu

我在wordpress中遇到wp_nav_menu的问题.我想制作Li元素的结构,其中所有元素都有类"menu-li".但它对我不起作用.我在function.php文件中有这个:

register_nav_menus(
array(
'primary-menu' => __( 'Primary Menu' ),
'secondary-menu' => __( 'Secondary Menu' )
));
Run Code Online (Sandbox Code Playgroud)

然后我在Wordpress管理面板中创建了菜单,现在我想将我的菜单添加到我的主题中.

                    <?php

                $defaults = array(
                    'theme_location'  => 'primary-menu',
                    'menu'            => '',
                    'container'       => '',
                    'container_class' => '',
                    'container_id'    => '',
                    'menu_class'      => 'menu-li',
                    'menu_id'         => '',
                    'echo'            => true,
                    'fallback_cb'     => 'wp_page_menu',
                    'before'          => '',
                    'after'           => '',
                    'link_before'     => '',
                    'link_after'      => '',
                    'items_wrap'      => '<ul>%3$s</ul>',
                    'depth'           => 0,
                    'walker'          => ''
                );
                wp_nav_menu( $defaults );
                ?>
Run Code Online (Sandbox Code Playgroud)

它将所有elemnet显示为ul in ul但没有类"menu-li".如何将其添加到所有li元素?

Tim*_*one 10

所述menu_class的参数wp_nav_menu()控制类添加到<ul>包装元素,而不是单个<li>的.要向菜单项添加类,您需要使用nav_menu_css_class过滤器.

以下是它的工作原理(将其添加到主题functions.php文件中):

add_filter ( 'nav_menu_css_class', 'so_37823371_menu_item_class', 10, 4 );

function so_37823371_menu_item_class ( $classes, $item, $args, $depth ){
  $classes[] = 'menu-li';
  return $classes;
}
Run Code Online (Sandbox Code Playgroud)

这会将menu-li类添加到每个菜单项.

如果您愿意$item,也可以根据$args传递给此过滤器的等有条件地执行此操作.


小智 5

如果您需要在自定义菜单中添加类,请使用下一个代码:

add_filter('nav_menu_css_class','arg_menu_classes',110,3);

function arg_menu_classes($classes, $item, $args) {
    if($args->menu == 'FooterMenu') { // name need menu
        $classes[] = 'col-6 col-sm-6'; // add classes
    }
    return $classes;
}
Run Code Online (Sandbox Code Playgroud)