Aggiungere la classe "current_page_item" al menu per custom post type
Sto utilizzando il seguente codice per visualizzare un elenco di post creati in un custom post type.
$args = array(
'post_type'=>'portfolio',
'title_li'=> __('Portfolio') // Traduzione del titolo "Portfolio"
);
wp_list_pages( $args );
Tuttavia non viene aggiunta la classe all'elemento della lista della pagina corrente (current_page_item
). Qualcuno ha idee su come risolvere questo problema?

Controlla questo ticket: http://core.trac.wordpress.org/ticket/17590
Soluzione rapida proposta da husobj:
function my_page_css_class( $css_class, $page ) {
global $post;
if ( $post->ID == $page->ID ) {
$css_class[] = 'current_page_item';
}
return $css_class;
}
add_filter( 'page_css_class', 'my_page_css_class', 10, 2 );
Questa soluzione rapida potrebbe essere un'alternativa più semplice? Saluti

Ho trovato questo e funziona perfettamente!

Puoi utilizzare questo codice per rendere attivo il tipo di post genitore nel menu:
<?php
add_action('nav_menu_css_class', 'add_current_nav_class', 10, 2 );
function add_current_nav_class($classes, $item) {
// Ottenere i dettagli del post corrente
global $post;
// Ottenere il tipo di post del post corrente
$current_post_type = get_post_type_object(get_post_type($post->ID));
$current_post_type_slug = $current_post_type->rewrite[slug];
// Ottenere l'URL della voce di menu
$menu_slug = strtolower(trim($item->url));
// Se l'URL della voce di menu contiene lo slug del tipo di post corrente, aggiungi la classe current-menu-item
if (strpos($menu_slug,$current_post_type_slug) !== false) {
$classes[] = 'current-menu-item';
}
// Restituisce l'array di classi corretto da aggiungere alla voce di menu
return $classes;
}
?>
Ho trovato questo codice in questo Gist e ha funzionato per me - contrassegna la navigazione genitore come attiva quando ci si trova in un singolo post di un tipo di post personalizzato.

Vorrei aggiungere una soluzione alternativa che ha funzionato nel mio caso.
Avevo un Custom Post Type con una Tassonomia Personalizzata e volevo elencare questi post solo se appartenevano a una particolare Categoria Personalizzata - con la classe della pagina corrente sul tag li
.
Il codice sopra*
produceva un elenco di tutti i post, ma non filtrava le categorie.
*
[nota del redattore] L'ordine delle risposte può variare, non sono sicuro a quale codice si riferisca.
La mia soluzione deriva da quel codice, non so se sia la migliore pratica, ma funziona...
<?php
// ottieni l'ID della pagina/post corrente
$pageID = get_the_ID();
query_posts( array( 'post_type' => 'developments', 'custom_cat' => 'current' ) );
if ( have_posts() ) :
while ( have_posts() ) :
the_post();
// verifica se l'ID della pagina/post corrente corrisponde
if ( $post->ID == $pageID ) {
$class = 'current_page_item';
} else {
$class = '';
}
?>
<li <?php if ($class != '') echo 'class="'.$class.'"'; ?>>
<a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a>
</li>
<?php
endwhile;
endif;
wp_reset_query();
?>

Devi aggiungere questo al tuo functions.php:
function kct_page_css_class( $css_class, $page, $depth, $args, $current_page ) {
if ( !isset($args['post_type']) || !is_singular($args['post_type']) )
return $css_class;
global $post;
$current_page = $post->ID;
$_current_page = $post;
_get_post_ancestors($_current_page);
if ( isset($_current_page->ancestors) && in_array($page->ID, (array) $_current_page->ancestors) )
$css_class[] = 'current_page_ancestor';
if ( $page->ID == $current_page )
$css_class[] = 'current_page_item';
elseif ( $_current_page && $page->ID == $_current_page->post_parent )
$css_class[] = 'current_page_parent';
return $css_class;
}
add_filter( 'page_css_class', 'kct_page_css_class', 10, 5 );
Tramite http://kucrut.org/wp_list_pages-for-custom-post-types/

if(site_url()."/".get_post_type() == $menu_item->url || site_url()."/".$post->post_name == $menu_item->url){#STUFF TO IDENTIFY ON FRONT}
mi aiuta ad aggiungere la classe "active" all'elemento corrente del menu quando eseguo il LOOP di wp_get_nav_menu_items
come foreach($primary_nav_menu_items as $n => $menu_item){#do something}
. Potrebbe essere utile a qualcuno.
