web-dev-qa-db-fra.com

Comment spécifier manuellement la page active en cours avec wp_nav_menu ()

Existe-t-il un moyen de spécifier manuellement quelle page est actuellement "active" lors de l'utilisation de wp_nav_menu()?

J'ai une page "Produits" et sur cette page, j'ai des liens vers diverses taxonomies personnalisées (dynamiques). Lorsque je clique sur l'une de ces taxonomies, je reste sur la page "Produits" mais wp_nav_menu() perd la référence au fait que je suis toujours sur la page "Produits". Y at-il un moyen que je puisse résoudre ce problème?

Merci!

Jon

9
Jon

Si vous souhaitez simplement ajouter la classe current_page_item à un élément de menu, vous pouvez vous connecter au filtre nav_menu_css_class et ajouter cette classe si nécessaire. Cela s'appelle quand le menu est imprimé .

Si vous souhaitez accéder à l'ensemble du menu et ajouter des classes, connectez-vous au filtre wp_get_nav_menu_items, où vous obtenez le tableau $items complet. Vous pouvez modifier les propriétés classes de chaque élément.

12
Jan Fabry

@Jon Tant que vous utilisez <body <?php body_class(); ?>>, WordPress attribuera la classe current_page_item à votre menu, ainsi que current_page_parent si vous utilisez les menus déroulants.

2
Chris_O

Jan a mentionné le filtre nav_menu_css_class. Je l'ai donc consulté et cet exemple m'a été utile. Source: https://codex.wordpress.org/Plugin_API/Filter_Reference/nav_menu_css_class

function my_special_nav_class( $classes, $item ) {
    if ( is_single() && $item->title == 'Blog' ) {
        $classes[] = 'special-class';
    }
    return $classes;
}    
add_filter( 'nav_menu_css_class', 'my_special_nav_class', 10, 2 );
0
Ross