I'm using this snippet for marking the parent navigation active when on custom post type single page:
add_action('nav_menu_css_class', 'add_current_nav_class', 10, 2 );
function add_current_nav_class($classes, $item) {
// Getting the current post details
global $post;
// Getting the post type of the current post
$current_post_type = get_post_type_object(get_post_type($post->ID));
$current_post_type_slug = $current_post_type->rewrite[slug];
// Getting the URL of the menu item
$menu_slug = strtolower(trim($item->url));
// If the menu item URL contains the current post types slug add the current-menu-item class
if (strpos($menu_slug,$current_post_type_slug) !== false) {
$classes[] = 'current-menu-item';
}
// Return the corrected set of classes to be added to the menu item
return $classes;
}
But it doesn't mark a page when you are one more step inside that page.
For example: When I'm at home/photo
, the active link marks with .current-menu-item
with no problem. But, when I'm inside home/photo/this-photo
, the active link class disappears.
Here's is my site. To replicate the behavior, please click on one of the thumbnails to go to a single page from that post type and see that photography link on the left deactivates.
This is also replicable inside blog page. This is a custom template with a custom loop to get all the posts (not custom posts).
Here's my code:
add_action('nav_menu_css_class', 'add_current_nav_class', 10, 2 );
function add_current_nav_class($classes, $item) {
// Getting the current post details
global $post;
// Getting the post type of the current post
$current_post_type = get_post_type_object(get_post_type($post->ID));
$current_post_type_slug = $current_post_type->rewrite['slug'];
// Getting the URL of the menu item
$menu_slug = strtolower(trim($item->url));
// If the menu item URL contains the current post types slug add the current-menu-item class
if (strpos($menu_slug,$current_post_type_slug) !== false) {
$classes[] = 'current-menu-item';
}
// Return the corrected set of classes to be added to the menu item
return $classes;
}
$item->url
and the$menu_slug
forhome/photo/this-photo
, maybe even var_dump the$current_post_type
to see more details?active
.active
on the classes. But it only did it in the custom post types. Not inside the blog.