Come aggiungere la classe active alla voce di menu della pagina corrente?
Ho due link: Prodotti e News.
Quando clicco su Prodotti o News, mi porta a una pagina di archivio che contiene alcuni post, quando clicco su un post mi porta alla pagina singola di quel post.
Nel menu uso questo codice sul <li> per aggiungere una classe chiamata active se la pagina è home:
<li<?php if(is_home()) {?> class="active"<?php } ?>>
Ma non so come fare quando ho due pagine di archivio e due pagine singole.
Se uso if( is_archive() || is_single() ) aggiungerà la classe a entrambe le voci di menu.
Qualsiasi aiuto sarebbe apprezzato.
Puoi aggiungere classi condizionali per ciascun elemento nel file functions del tuo child theme:
Ecco un esempio che puoi modificare in base alle tue esigenze.
add_filter('nav_menu_css_class' , 'wpsites_nav_class' , 10 , 2);
function wpsites_nav_class($classes, $item){
if( is_archive() && $item->title == "Prodotti"){
$classes[] = "products-class";
}
return $classes;
Fonte http://codex.wordpress.org/Function_Reference/wp_nav_menu#Adding_Conditional_Classes_to_Menu_Items
Puoi quindi stilizzare il tuo menu di navigazione utilizzando la nuova classe nel file style.css del tuo child theme.
.products-class {
Le tue dichiarazioni CSS
}
Questo codice CSS è condizionale in base al codice PHP sopra riportato.
dove dovrei inserire questo codice? in function.php? e dove apparirà questa "products-class"?
Ramon Vasconcelos
Inserisci il codice alla fine del tuo file functions.php. Usa la classe nel file style.css del tuo child theme.
Brad Dalton
Intendo, dove questa funzione aggiunge la classe nel codice? nel body?
Ramon Vasconcelos
Aggiunge l'elemento al menu di navigazione che includi nel codice PHP. Lo aggiunge condizionalmente solo alla voce del menu prodotti quando sei su una pagina di archivio. Modifica semplicemente i tag condizionali in base alle tue esigenze.http://codex.wordpress.org/Conditional_Tags
Brad Dalton
Suppongo che i tuoi post Prodotti e News siano custom post.
Per entrambi i conditional tag, esiste un equivalente specifico per $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'))) {
// ...
}
Quindi, per Prodotti, sarebbe:
if (is_post_type_archive('products') || is_singular('products'))
News di conseguenza.
Riferimenti: