Agregar clase "current_page_item" para menú de tipo de publicación personalizada
Estoy usando lo siguiente para mostrar una lista de posts creados en un tipo de publicación personalizada:
$args = array(
'post_type'=>'portfolio',
'title_li'=> __('Portfolio') // Traducir 'Portfolio' según sea necesario
);
wp_list_pages( $args );
Sin embargo, no se está agregando la clase al elemento de lista de la página actual (current_page_item
). ¿Alguna idea de cómo podría hacer que esto suceda?

Revisa este ticket: http://core.trac.wordpress.org/ticket/17590
Solución rápida por 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 );
¿Podría ser esta solución rápida una alternativa más sencilla? Saludos

¡Encontré esto y funciona perfectamente!
Navegación dinámica para tipos de contenido personalizados (páginas)

Puedes usar este código para hacer que el tipo de publicación padre esté activo en el menú:
<?php
add_action('nav_menu_css_class', 'add_current_nav_class', 10, 2 );
function add_current_nav_class($classes, $item) {
// Obteniendo los detalles de la publicación actual
global $post;
// Obteniendo el tipo de publicación de la publicación actual
$current_post_type = get_post_type_object(get_post_type($post->ID));
$current_post_type_slug = $current_post_type->rewrite[slug];
// Obteniendo la URL del elemento del menú
$menu_slug = strtolower(trim($item->url));
// Si la URL del elemento del menú contiene el slug del tipo de publicación actual, añade la clase current-menu-item
if (strpos($menu_slug,$current_post_type_slug) !== false) {
$classes[] = 'current-menu-item';
}
// Devuelve el conjunto corregido de clases para añadir al elemento del menú
return $classes;
}
?>
Encontré este código en este Gist y me funcionó - marca la navegación padre como activa cuando estás en una publicación individual de un tipo de publicación personalizado.

Me gustaría compartir una solución alternativa que funcionó en mi caso.
Tenía un Custom Post Type con una Taxonomía Personalizada y quería listar estos posts siempre que estuvieran en una Categoría Personalizada específica - con la clase de página actual en el li
.
El código mencionado anteriormente*
producía una lista de todos los posts, pero no filtraba por categorías.
*
[nota del editor] El orden de las respuestas puede variar, no estoy seguro a qué código se refiere.
Mi solución se basa en ese código, no estoy seguro si es la mejor práctica, pero funciona...
<?php
// obtener el ID de la página/post actual
$pageID = get_the_ID();
query_posts( array( 'post_type' => 'developments', 'custom_cat' => 'current' ) );
if ( have_posts() ) :
while ( have_posts() ) :
the_post();
// comprobar si el ID de la página/post actual coincide
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();
?>

Necesitas agregar esto a tu 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 );

if(site_url()."/".get_post_type() == $menu_item->url || site_url()."/".$post->post_name == $menu_item->url){#CÓDIGO PARA IDENTIFICAR EN EL FRONT}
me ayuda a agregar la clase activa actual al elemento del menú cuando recorro wp_get_nav_menu_items
como foreach($primary_nav_menu_items as $n => $menu_item){#hacer algo}
. Puede ser útil para alguien.
