4

I need the Wordpress menu to include the 'current-menu-ancestor' class to reflect that site is currently in the recipe section. Supposing I have a recipe custom post type. I have the following code in my functions.php but it's not working:

function add_active_item_classes($classes = array(), $menu_item = false){

if ( get_post_type() == 'recipe' && $menu_item->title == 'Recipes') {
$classes[] = 'current-menu-ancestor';

return $menuclasses;
}
}

Also I don't know what filter hooks I will use to have this effect? Thanks for your suggestion and assistance.

2 Answers 2

1

This is the final working code:

<?php
function additional_active_item_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_name == 'product' && is_post_type_archive('product') ) {
    $classes[] = 'current-menu-item';
}

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


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

?>
1
  • 2
    WTF is this? It doesn't add the current-menu-ancestor class and you declare global $wp_query but never use it. Please figure out what the hell you are doing before trying to help others. Jan 11, 2016 at 20:20
0

This code add class 'current-menu-ancestor' to parent item menu of your child CPT or custom taxonomy or default single post, in case you do not have a nested menu structure in the admin panel - only if you have 'level 0' menu. For example - if you have Page Product, which display products grid and you go to the single product - WP will not see the parent menu item. The code below improve this:

function additional_active_item_classes( $classes = array(), $menu_item = false ) {
    // custom taxonomy
    if ( $menu_item->title == 'Custom Tax Name Page' && is_tax('custom_tax') ) {
        $classes[] = 'current-menu-ancestor';
    }
    // custom post type single
    if ( $menu_item->title == 'Custom Post Type Page' && is_singular('products') ) {
        $classes[] = 'current-menu-ancestor';
    }
    // blog post single
    if ( $menu_item->title == 'Blog Page' && is_singular('post') ) {
        $classes[] = 'current-menu-ancestor';
    }
    return $classes;
}
add_filter( 'nav_menu_css_class', 'additional_active_item_classes', 10, 2 );
1
  • Please edit your answer, and add an explanation: why could that solve the problem?
    – fuxia
    Apr 5, 2019 at 10:39

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

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