Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

I created a custom nav menu for my custom post type by custom links (linked to the archive page). Let say I have a custom post type named "product", and when I click on the menu, it will go to the archive page of 'product', and the 'product' will be highlighted. It is pretty easy since WP will automatically add the 'current-menu-item' class to the menu when in the 'product' archive page.

But there is a problem, in the archive page, the 'current-menu-item' seem only add to the 1st page of the archive. When I go to page 2 the 'current-menu-item' is not added in the class, and the menu not highlighted.

Apart of that, I also want the menu get highlighted when viewing the post under 'product' type.

So I tried to add this code to the function:

function add_active_classes($classes = array(), $menu_item = false){
global $wp_query;

if(in_array('current-menu-item', $menu_item->classes)){
    $classes[] = 'current-menu-item';
}

if ( $menu_item->post_type == 'product' && is_post_type_archive('product') ) {
    $classes[] = 'current-menu-item';
}

if ( $menu_item->post_type== 'product' && is_singular('product') ) {
    $classes[] = 'current-menu-item';
}


return $classes;
}
add_filter( 'nav_menu_css_class', 'add_active_classes', 10, 2 );

The result is nothing changed. What did I done wrong?

share|improve this question

1 Answer 1

You have it almost right. Try the following:

function add_active_classes($classes = array(), $menu_item = false){
global $wp_query;

if(in_array('current-menu-item', $menu_item->classes)){
    $classes[] = 'current-menu-item';
}

if ( $menu_item->title == 'product' && is_post_type_archive('product') ) {
    $classes[] = 'current-menu-item';
}

if ( $menu_item->title== 'product' && is_singular('product') ) {
    $classes[] = 'current-menu-item';
}


return $classes;
}
add_filter( 'nav_menu_css_class', 'add_active_classes', 10, 2 );

I assume that your custom post type is called "product" and that you have a page with that slug created and added to your menu

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.