Opened 2 years ago
Last modified 7 months ago
#17590 new defect (bug)
wp_list_pages() not setting "current_page_item" classes on custom post types
| Reported by: |
|
Owned by: | |
|---|---|---|---|
| Priority: | normal | Milestone: | Future Release |
| Component: | Themes | Version: | 3.1 |
| Severity: | normal | Keywords: | has-patch |
| Cc: | ben@…, daveleeone |
Description (last modified by SergeyBiryukov)
wp_list_pages() don't set the correct css for a hierarchical custom post type.
To reproduce this bug do this:
<?php wp_list_pages("title_li=&post_type=custom_post_type_name"); ?>
and compare the html output to normal pages:
<?php wp_list_pages(); ?>
The problem seems to be this row in wp_list_pages():
if ( is_page() || is_attachment() || $wp_query->is_posts_page )
In the following patch i've changed it to
if ( is_page() || is_attachment() || $wp_query->is_posts_page || ($wp_query->query_vars['post_type'] != 'post' && is_single()) )
(If this is not the intended behavoir please let me know. )
Attachments (3)
Change History (17)
- Cc ben@… added
As a temporary measure you can hook into to add selected classes like this:
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 );
Nice quickfix, however i would prefer pinpointing custom post types.
Replying to husobj:
As a temporary measure you can hook into to add selected classes like this:
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 );
Thanks for the fix with the hook guys.
However I really wonder why it is still not fixed after 9 months.
comment:5
daveleeone — 14 months ago
- Cc daveleeone added
- Type changed from defect (bug) to feature request
Thanks for the very useful hook, but how can I highlight the parent page? At the moment I use Jquery for this.
Any Ideas?
Thanks, Davelee
comment:6
daveleeone — 14 months ago
- Type changed from feature request to defect (bug)
Hi dave! I haven't noticed the parent page-thing, guess that's a bug in the Walker class. How do I recreate it?
comment:8
follow-up:
↓ 9
daveleeone — 14 months ago
Hi Tobias, thanks for reply.
I have not seen, unfortunately, you've written back to me.
here is the code:
function file:
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 );
template file:
<?php
// create a ID of parent page to use the wp_list_page as submenu
if ($post->post_parent) {
$ancestors=get_post_ancestors($post->ID);
$root=count($ancestors)-1;
$parent = $ancestors[$root];
} else {
$parent = $post->ID;
}
?>
<ul class="submenu">
<?php
// create a Submenu for CPT's
$args = array(
'post_type' => 'event',
'child_of' => $parent,
'title_li' => __('')
);
wp_list_pages( $args );
?>
</ul>
jquery file
$(document).ready(function(){
$('.submenu li:has(li.current_page_item)').addClass('parent_page_item');
});
I hope it helps.
if you make it I'll pay you a beer :)
Hi Dave! This has nothing to do with the trac bug. Could you please remove the comment here and repost it in the support forum? I'll answer you there.
comment:10
thomas.mery — 11 months ago
Hi,
I was wondering if this had been looked at ?
it seems like this would be quite useful now that CPT are used so often by the wp community
thanks
Closed #21525 as a duplicate.
SergeyBiryukov — 10 months ago
- Milestone changed from Awaiting Review to 3.5
SergeyBiryukov — 7 months ago
comment:13
SergeyBiryukov — 7 months ago
17590.2.patch does a hierarchical check, as suggested during the bug scrub.
is_attachment() was added in [10947] (for #9472), so I've kept it.
comment:14
nacin — 7 months ago
- Milestone changed from 3.5 to Future Release
get('post_type') could be an array.

wp_list_pages() css patch for custom post types