Cum să adaugi o clasă specifică doar elementelor dintr-un anumit meniu în WordPress
Acest cod adaugă o clasă suplimentară tuturor elementelor din meniul meu:
add_filter('nav_menu_css_class' , 'special_nav_class' , 10 , 2);
function special_nav_class($classes, $item){
$classes[] = 'btn';
return $classes;
}
Cum pot restricționa acest filtru doar pentru meniul principal (din locația temei 'primary-menu')?
Salutări,
Daniel
Am încercat și eu să rezolv această problemă și în timp ce căutam o soluție, am descoperit că nav_menu_css_class
filtrul acceptă de fapt un al treilea parametru. Acesta este un obiect care conține variabile legate de meniul tău și include variabila theme_location
pe care o poți folosi pentru a aplica condiționat nume de clase unui anumit meniu. Trebuie doar să te asiguri că ai setat theme_location
atunci când apelezi wp_nav_menu în tema ta.
Iată un exemplu:
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;
}

Am dat peste acest fir încercând să rezolv aceeași problemă - iată la ce m-am gândit. Nu știu cât de bine funcționează, deoarece va fi apelat pentru fiecare element de meniu, dar se pare că meniurile sunt configurate ca taxonomii în WordPress, așa că poți folosi has_term()
pentru a determina dacă elementul se află într-un anumit meniu și get_nav_menu_locations()
pentru a obține lista meniurilor din fiecare locație a temei.
Modific codul tău:
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;
}

Adaugând acest cod în fișierul functions.php, totul va funcționa
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;
}
