wp_list_pages() is a handy little function for displaying a list of hierarchical post type, and it works with custom post types too. Unfortunately, when used for a custom post type, the list items don’t have the necessary CSS classes for current page item/ancestors. Here’s a quick fix for this particular problem.
function kct_page_css_class( $css_class, $page, $depth, $args, $current_page ) {
if ( !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 );
