Aggiungi classe agli elementi del menu per un menu specifico (nav_menu_css_class)

13 mar 2013, 11:21:56
Visualizzazioni: 19.7K
Voti: 6

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

0
Tutte le risposte alla domanda 4
1
16

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;
}
2 mar 2015 02:21:12
Commenti

nel mio caso, ho chiamato il menu tramite wp_nav_menu( ['menu' => 'main'] ); quindi $args->theme_location era vuoto. ma $args->name non lo era (dato che ho impostato solo questo..), quindi ho usato questo attributo e funziona..

honk31 honk31
23 feb 2017 18:39:36
0

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;
}
30 apr 2013 01:07:01
1

Non è necessario modificare il tuo file functions.php. Basta andare nel file del template, trovare wp_nav_menu e aggiungere 'menu_class'.

<?php wp_nav_menu( array( 'theme_location' => 'primary','menu_class' => 'newmenuclass' ) ); ?>
13 mar 2013 11:46:20
Commenti

Grazie per la risposta, ma ho bisogno di una classe per gli elementi del menu (li), non per l'intero menu (ul).

Daniel Baars Daniel Baars
13 mar 2013 18:07:49
0

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;
}
9 nov 2017 10:14:28