Cum să adaugi o clasă specifică doar elementelor dintr-un anumit meniu în WordPress

13 mar. 2013, 11:21:56
Vizualizări: 19.7K
Voturi: 6

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

0
Toate răspunsurile la întrebare 4
1
16

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

în cazul meu, am apelat meniul prin wp_nav_menu( ['menu' => 'main'] ); așa că $args->theme_location era gol. dar $args->name nu era (deoarece doar am setat asta...), așa că am mers cu acest atribut și funcționează..

honk31 honk31
23 feb. 2017 18:39:36
0

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

Nu este nevoie să modifici fișierul functions.php. Pur și simplu mergi în fișierul template și găsește wp_nav_menu, apoi adaugă 'menu_class' la el.

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

Mulțumesc pentru răspuns, dar am nevoie de o clasă pentru elementele din meniu (li), nu pentru întregul meniu (ul).

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

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