【问题标题】:Adding class to li elements in wp_nav_menu将类添加到 wp_nav_menu 中的 li 元素
【发布时间】:2016-10-15 20:33:20
【问题描述】:

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

register_nav_menus(
array(
'primary-menu' => __( 'Primary Menu' ),
'secondary-menu' => __( 'Secondary Menu' )
));

然后我在 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 );
                ?>

它在 ul 中将所有 elemnet 显示为 li,但没有类“menu-li”。如何将它添加到所有 li 元素?

【问题讨论】:

    标签: wordpress menu


    【解决方案1】:

    wp_nav_menu()menu_class 参数控制添加到&lt;ul&gt; 包装器元素的类,而不是单独的&lt;li&gt; 的类。要将类添加到菜单项,您需要使用nav_menu_css_class filter

    这是它的工作原理(将其添加到您主题的 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;
    }
    

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

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

    【讨论】:

    • 对于 WordPress 4.1+,您需要在 add_filter 方法中再添加 2 个参数,如下所示。add_filter( 'nav_menu_css_class', 'so_37823371_menu_item_class', 10, 4 ); 。请参阅here 了解更多信息!
    • 谢谢@Garth。我的错!已编辑。默认值为 10, 1 因此,当您需要指定多个参数时,实际上就是这种情况(不特定于 WP 4.1+)。如果您只需要 $classes ,另一种选择就是在您的函数中使用该参数。那么默认的 10, 1 就足够了。
    • 收到此错误:Uncaught ArgumentCountError: Too few arguments to function so_37823371_menu_item_class()
    • @Strange 可能add_filter() 调用缺少最后一个参数4,如答案中所示(或者在so_37823371_menu_item_class 中要求超过4 个参数)。
    【解决方案2】:

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

    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;
    }
    

    【讨论】:

      猜你喜欢
      • 2018-03-20
      • 1970-01-01
      • 2012-11-18
      • 2023-03-15
      • 1970-01-01
      • 2013-01-06
      • 2015-12-07
      • 2018-11-23
      • 1970-01-01
      相关资源
      最近更新 更多