Adaugă clasa pentru elementul activ și părintele său în meniul de navigare
Folosesc următorul cod pentru a adăuga clasa "active" elementului curent din meniu:
add_filter('nav_menu_css_class', 'add_active_class', 10, 2 );
function add_active_class($classes, $item) {
if( $item->menu_item_parent == 0 && in_array('current-menu-item', $classes) ) {
$classes[] = "active";
}
return $classes;
}
Acest cod funcționează perfect, dar doar pentru elementele fără submeniu dropdown. Dacă există un element cu elemente copil, nu va adăuga clasa active elementului părinte.
Există vreo modalitate prin care pot modifica acest cod astfel încât filtrul să adauge clasa "active" atât linkului curent cât și părintelui său?
În funcție de contextul în care aveți nevoie de acest lucru și pornind de la codul pe care îl aveți, puteți încerca următoarele:
add_filter('nav_menu_css_class', 'add_active_class', 10, 2 );
function add_active_class($classes, $item) {
$class_names = array( 'current-menu-item', 'current-menu-ancestor', 'current-menu-parent', 'current_page_parent', 'current_page_ancestor' );
if( $item->menu_item_parent == 0 && in_array( $class_names, $classes) ) {
$classes[] = "active";
}
return $classes;
}
ACTUALIZARE: dacă codul de mai sus nu funcționează din cauza utilizării array-ului ca parametru pentru funcția in_array datorită versiunii PHP, încercați următorul cod:
add_filter('nav_menu_css_class', 'add_active_class', 10, 2 );
function add_active_class($classes, $item) {
if( $item->menu_item_parent == 0 &&
in_array( 'current-menu-item', $classes ) ||
in_array( 'current-menu-ancestor', $classes ) ||
in_array( 'current-menu-parent', $classes ) ||
in_array( 'current_page_parent', $classes ) ||
in_array( 'current_page_ancestor', $classes )
) {
$classes[] = "active";
}
return $classes;
}
Dacă doriți ca orice element curent să aibă clasa active, puteți face astfel:
add_filter('nav_menu_css_class', 'add_active_class', 10, 2 );
function add_active_class($classes, $item) {
if( in_array( 'current-menu-item', $classes ) ||
in_array( 'current-menu-ancestor', $classes ) ||
in_array( 'current-menu-parent', $classes ) ||
in_array( 'current_page_parent', $classes ) ||
in_array( 'current_page_ancestor', $classes )
) {
$classes[] = "active";
}
return $classes;
}

Salut @splashingpixels. Am încercat codul tău, dar nu pare să funcționeze. Am verificat codul sursă și clasa "active" nu este adăugată.

Mulțumesc @splashingpixels, ești genial! Cod impecabil. Doar încă o întrebare, nu știu dacă e posibil sau dacă e o restricție Wordpress. Cu acest cod, acum toate elementele părinte au clasa "active" când e necesar. Există vreo modalitate ca atunci când dau click pe un element din dropdown, să adauge și acolo clasa "active"? Astfel încât clasa "active" să fie adăugată atât la părinte cât și la copil?

Da, poți, vezi răspunsul actualizat...și te rog să îl marchezi ca răspuns dacă a funcționat pentru tine...mulțumesc.
