class zu Menüelementen eines bestimmten Menüs hinzufügen (nav_menu_css_class)

Dieser Code fügt allen meinen Menüeinträgen eine zusätzliche class hinzu:

add_filter('nav_menu_css_class' , 'special_nav_class' , 10 , 2); function special_nav_class($classes, $item){ $classes[] = 'btn'; return $classes; } 

Wie beschränke ich diesen Filter auf mein Hauptmenü (im Themenbereich “primary-menu”)?

Grüße,

Daniel

Solutions Collecting From Web of "class zu Menüelementen eines bestimmten Menüs hinzufügen (nav_menu_css_class)"

Ich habe auch versucht, dieses Problem zu lösen und bei der Suche nach einer Lösung festgestellt, dass der nav_menu_css_class Filter tatsächlich einen dritten Parameter ausschließt . Dies ist ein Objekt, das Variablen für Ihr Menü enthält und die Variable theme_location enthält, die Sie verwenden können, um classnnamen in einem bestimmten Menü bedingt anzuwenden. Sie müssen nur sicherstellen, dass Sie theme_location wenn Sie wp_nav_menu in Ihrem theme_location aufrufen.
Hier ist ein Beispiel:

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

Ich bin auf diesen Thread gestoßen und habe versucht, das gleiche Problem zu lösen – das ist es, was ich mir ausgedacht habe. Ich weiß nicht, wie gut das funktioniert, da es für jeden einzelnen Menüeintrag aufgerufen wird, aber es scheint, dass Menüs als Taxonomien in WordPress eingerichtet sind, und Sie können has_term() um festzustellen, ob sich das Element in einem befindet bestimmtes Menü, und get_nav_menu_locations() , um die Liste der Menüs zurück zu ziehen, in denen sich die get_nav_menu_locations() .

Ändern Sie Ihren Code:

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

Sie müssen Ihre functions.php nicht ändern. Gehe einfach in deine Vorlagendatei und finde wp_nav_menu und füge ‘menu_class’ hinzu.

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

Hinzufügen zu mir selbst in function.php und alles wird funktionieren

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