J'utilise le code suivant pour ajouter un nom de classe "actif" à l'élément de menu actuel:
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;
}
Cela fonctionne comme un charme, mais seulement pour les articles sans liste déroulante. Si un élément contient des enfants, la classe active ne sera pas ajoutée à l'élément parent.
Est-il possible de modifier ce code afin que le filtre ajoute une classe "active" au lien actuel et à son parent?
En fonction du contexte dont vous avez besoin et du code que vous avez, vous pouvez essayer ceci:
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;
}
UPDATE: si ci-dessus ne fonctionne pas à cause du tableau utilisé comme aiguille pour la fonction in_array à cause de la version PHP, essayez le code ci-dessous:
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;
}
Si vous souhaitez que la classe soit active pour un élément en cours, procédez comme suit:
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;
}