2016-06-14 102 views
2

我在wordpress中遇到了wp_nav_menu问题。我想制作李元素的结构,他们都会有班级“菜单里”。但它对我不起作用。我有这个在function.php文件:在wp_nav_menu中添加li元素的类

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,但没有class“menu-li”。我如何将它添加到所有li元素?

回答

5

参数wp_nav_menu()控制添加到<ul>包装元素的类,而不是单个<li>的。要将菜单项添加到菜单项中,您需要使用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等有条件地做到这一点,如果你喜欢传递给这个过滤器。

+1

谢谢你的男人:) – Roberto

+0

WordPress的** 4.1 + **你需要2个参数添加到方法的add_filter像所以..'add_filter('nav_menu_css_class','so_37823371_menu_item_class',10,4); '。请参阅[这里](https://codex.wordpress.org/Plugin_API/Filter_Reference/nav_menu_css_class)了解更多信息! – Garth

+1

谢谢@Garth。我的错!已编辑。默认值是10,1,因此,无论何时您需要指定多个参数(不是特定于WP 4.1+),实际情况都是如此。另一种选择,如果你只需要$类,只能在你的函数中使用该参数。那么默认的10,1就足够了。 –

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; 
} 
相关问题