将类添加到某个特定菜单的菜单项(NAV_MENU_CS_CLASS)

时间:2013-03-13 作者:Daniel Baars

此代码向“我的所有菜单项”添加了一个额外的类:

add_filter(\'nav_menu_css_class\' , \'special_nav_class\' , 10 , 2);
function special_nav_class($classes, $item){
  $classes[] = \'btn\';
  return $classes;
}
如何将此过滤器限制在主菜单中(在主题位置“主菜单”中)?

当做

丹尼尔

4 个回复
SO网友:Dylan

我还试图解决这个问题,在寻找解决方案时,发现nav_menu_css_class filter actually excepts a third parameter. 这是一个包含与菜单相关的变量的对象,包括theme_location 变量,可用于有条件地将类名应用于特定菜单。您只需确保设置theme_location 当你打电话的时候wp_nav_menu 在您的主题中
下面是一个示例:

add_filter( \'nav_menu_css_class\', \'special_nav_class\', 10, 3 );
function special_nav_class( $classes, $item, $args ) {
    if ( \'primary-menu\' === $args->theme_location ) {
        $classes[] = \'btn\';
    }

    return $classes;
}

SO网友:epowell

我遇到了这个线程,试图解决同样的问题-这就是我想到的。我不知道它的性能如何,因为每个菜单项都会调用它,但似乎菜单是在WordPress中设置为分类法的,因此您可以使用has_term() 确定项目是否在特定菜单中,以及get_nav_menu_locations() 要拉回哪个菜单位于哪个主题位置的列表。

修改代码:

add_filter(\'nav_menu_css_class\' , \'special_nav_class\' , 10 , 2);
function special_nav_class($classes, $item){
    $menu_locations = get_nav_menu_locations();
    if ( has_term($menu_locations[\'primary-menu\'], \'nav_menu\', $item) ) {
        $classes[] = \'btn\';
    }
    return $classes;
}

SO网友:jiano

您不需要修改函数。php。只需进入模板文件,找到wp\\u nav\\u menu并向其中添加“menu\\u class”。

<?php wp_nav_menu( array( \'theme_location\' => \'primary\',\'menu_class\' => \'newmenuclass\' ) ); ?>

SO网友:Vladimir Storozhuk

在函数中将其添加到我自己。php和所有东西都可以使用

add_filter(\'nav_menu_css_class\' , \'special_nav_class\' , 10 , 2);


function special_nav_class ($classes, $item) {

    $classes[] = \'nav__link\';

    if (in_array(\'current-menu-item\', $classes) ){

        $classes[] = \'nav__link-active\';

    }

    return $classes;
}

结束

相关推荐

Functions.php中的帖子ID错误

我试图在我的函数中执行以下代码。php更改我的wordpress博客的标题。function filter_pagetitle($url) { global $wp_query; $the_post_id = $wp_query->post->ID; $the_post_data = get_post($the_post_id); return $the_post_da