Aggiungi classe agli elementi del menu per un menu specifico (nav_menu_css_class)
Questo codice aggiunge una classe extra a tutti i miei elementi del menu:
add_filter('nav_menu_css_class' , 'special_nav_class' , 10 , 2);
function special_nav_class($classes, $item){
$classes[] = 'btn';
return $classes;
}
Come posso limitare questo filtro al mio menu principale (nella posizione del tema 'primary-menu')?
Cordiali saluti,
Daniel
Stavo anche cercando di risolvere questo problema e durante la ricerca di una soluzione, ho scoperto che il filtro nav_menu_css_class
in realtà accetta un terzo parametro. Si tratta di un oggetto contenente variabili relative al tuo menu e include la variabile theme_location
che puoi utilizzare per applicare in modo condizionale i nomi delle classi a un menu specifico. Devi solo assicurarti di impostare il theme_location
quando chiami wp_nav_menu nel tuo tema.
Ecco un esempio:
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;
}

Mi sono imbattuto in questo thread cercando di risolvere lo stesso problema - ecco cosa ho trovato. Non so quanto performante sia questa soluzione, dato che verrà chiamata per ogni singola voce del menu, ma sembra che i menu siano configurati come tassonomie all'interno di WordPress, quindi puoi usare has_term()
per determinare se la voce è in un menu specifico, e get_nav_menu_locations()
per ottenere la lista di quali menu sono in quali posizioni del tema.
Modificando il tuo codice:
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;
}

Aggiungilo al mio file function.php e tutto funzionerà
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;
}
