web-dev-qa-db-fra.com

Comment ajouter une classe active sur la page d'élément de menu en cours?

J'ai deux liens: Produits et Nouvelles.

Lorsque je clique sur Produits ou Actualités, il me renvoie une page d'archive contenant certains articles. Lorsque je clique sur un article, il me renvoie une seule page de cet article.

Dans le menu, j'utilise ce code sur <li> pour ajouter une classe appelée active si la page est à la maison:

<li<?php if(is_home()) {?> class="active"<?php } ?>>

Mais je ne sais pas comment le faire quand j'ai deux pages d'archives et deux pages simples.

Si j'utilise if( is_archive() || is_single() ), il va ajouter une classe sur les deux menus.

Une aide serait appréciée.

3
Ramon Vasconcelos

Vous pouvez ajouter des classes conditionnelles pour chacune dans votre fichier de fonctions de thème enfant:

Voici un exemple que vous pouvez modifier pour répondre à vos propres besoins.

add_filter('nav_menu_css_class' , 'wpsites_nav_class' , 10 , 2);

function wpsites_nav_class($classes, $item){

if( is_archive() && $item->title == "Products"){     

         $classes[] = "products-class";
 }
 return $classes;

Source http://codex.wordpress.org/Function_Reference/wp_nav_menu#Adding_Conditional_Classes_to_Menu_Items

Vous pouvez ensuite styler votre menu de navigation en utilisant la nouvelle classe dans votre fichier style.css de thèmes enfants.

.products-class {

Your CSS declarations
}

Ce code CSS est conditionnel et basé sur le code PHP ci-dessus.

3
Brad Dalton

Je suppose que vos publications Products et News sont personnalisées.
Pour les deux balises conditionnelles, il existe un équivalent spécifique à $post_type:

if (is_post_type_archive('products')) {
   // ...
} elseif (is_post_type_archive(array('news', 'something'))) {
   // ...
} elseif (is_singular('products')) {
   // ...
} elseif (is_singular(array('news', 'something'))) {
   // ...
}

Donc, pour Produits, ce serait:

if (is_post_type_archive('products') || is_singular('products'))

_ {News} _ en conséquence.

Références:

0
tfrommen