Highlight parent menu item when child post

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;  } 

Replay

to highlight the menu element, you should add the class active. This will work for your photo custom post type.

Concerning your blog posts: As you can see, in the URL of a blog post there is no post/ which would be necessary for your code to act on. Furthermore, the blog overview page does not equal the custom post rewrite slug.

You could use something like this statement to add the active class for blog posts:

if (
     'post' === get_post_type($post->ID)
     && false !== strpos( $menu_slug, 'blog' )
) {
    $classes[] = 'current-menu-item';
    $classes[] = 'active';
}

Category: custom post types Time: 2016-07-29 Views: 0

Related post

iOS development

Android development

Python development

JAVA development

Development language

PHP development

Ruby development

search

Front-end development

Database

development tools

Open Platform

Javascript development

.NET development

cloud computing

server

Copyright (C) avrocks.com, All Rights Reserved.

processed in 0.176 (s). 12 q(s)