wake-up-neo.net

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

Dieser Code fügt allen meinen Menüpunkten eine zusätzliche Klasse hinzu:

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

Wie kann ich diesen Filter auf mein Hauptmenü beschränken (im Hauptmenü)?

Grüße,

Daniel

6
Daniel Baars

Ich habe auch versucht, dieses Problem zu lösen, und auf der Suche nach einer Lösung festgestellt, dass der Filter nav_menu_css_class tatsächlich einen dritten Parameter ausschließt. Dies ist ein Objekt mit Variablen, die sich auf Ihr Menü beziehen. Es enthält die Variable theme_location, mit der Sie Klassennamen auf ein bestimmtes Menü bedingt anwenden können. Sie müssen nur sicherstellen, dass Sie den theme_location einstellen, wenn Sie wp_nav_menu in Ihrem Theme 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;
}
13
Dylan

Ich bin auf diesen Thread gestoßen, der versucht, das gleiche Problem zu lösen - das habe ich mir ausgedacht. Ich weiß nicht, wie gut dies funktioniert, da es für jedes einzelne Menüelement aufgerufen wird, aber es scheint, dass Menüs in WordPress als Taxonomien eingerichtet sind, und Sie können has_term() verwenden, um festzustellen, ob sich das Element in einem bestimmten Menü befindet , und get_nav_menu_locations(), um die Liste der Menüs abzurufen, die sich an welcher Themenposition befinden.

Ä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;
}
3
epowell

Sie müssen Ihre functions.php nicht ändern. Gehen Sie einfach in Ihre Vorlagendatei und suchen Sie wp_nav_menu und fügen Sie 'menu_class' hinzu.

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

Füge es mir in function.php hinzu 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;
}
0