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

9

Existe-t-il un moyen de spécifier manuellement quelle page est actuellement "active" lors de l'utilisation 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 à ce fait que je suis toujours sur la page "Produits". Existe-t-il un moyen de résoudre ce problème?

Merci!

Jon

Jon
la source

Réponses:

12

Si vous souhaitez simplement ajouter la current_page_itemclasse à un élément de menu, vous pouvez vous connecter au nav_menu_css_classfiltre et ajouter cette classe si nécessaire. Il est appelé lorsque le menu est imprimé .

Si vous souhaitez accéder à l'ensemble du menu et ajouter des classes, connectez-vous au wp_get_nav_menu_itemsfiltre, où vous obtenez l'ensemble du $itemstableau. Vous pouvez modifier les classespropriétés des éléments individuels.

Jan Fabry
la source
2

@Jon Tant que vous utilisez <body <?php body_class(); ?>>WordPress affectera la classe current_page_itemà votre menu ainsi que current_page_parentsi vous utilisez des menus déroulants.

Chris_O
la source
1
Salut Chris, Merci pour la réponse. J'utilise le <body <? Php body_class (); ? >> mais le problème est qu'en ce qui concerne le wp_nav_menu (), les taxonomies en cliquant dessus ne lui sont pas liées! Donc, je dois dire à wp_nav_menu () - si la page est X, montrer "Products" comme current_page_parent.
Jon
0

Jan a mentionné le filtre nav_menu_css_class, donc je l'ai recherché 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 );
Ross
la source