Как сделать активным меню wordpress при выбранной категории woocomerce?

Как к категориям woocommerce (product_cat) применить активное меню, чтобы при определённых категориях подсвечивалось определённое меню.

Есть меню из двух пунктов. Яблоки Груши У каждого товара своя категория, у яблок (категория1, категория2,категория3) у груш (категория 4, категория5) как сделать активным(добавить current-menu-item или другой класс) то меню, к которому относится определенная категория. Если выбрана категории (категория1, категория2,категория3) то меню Яблоки активное а груши соответственно нет. Если выбрана категория (категория 4, категория5) то активное меню Груши

нашел пример такой (Сделает активным пункт меню с названием Blog, если находимся на странице рубрики с ID = 5. Если нужно и для записей этой рубрики, то добавить in_category(5).)

add_filter( 'nav_menu_css_class', 'add_custom_class', 10, 2 );

function add_custom_class( $classes = array(), $menu_item = false ) {
    if ( 'Blog' == $item->title && is_category(5) ) {
         $classes[] = 'current-menu-item';
    }
    return $classes;
}

нужно использовать is_product_cat ? подскажите пожалуйста


Ответы (1 шт):

Автор решения: Krya

Второй параметр включает в себя id - текущего поста/термина. Нужно проверить сразу является ли этот элемент меню товаров. Затем взять у него категории и, если есть категории, добавить новый класс. Пример:

add_filter( 'nav_menu_css_class', 'add_custom_class', 10, 2 );
function add_custom_class( $classes, $menu_item ) {    
    if ( is_product_cat() && 'product_cat' === $menu_item->object ) {
        $current_object = get_queried_object();
        $parents = get_terms( [
            'parent'   => $current_object->term_id,
            'taxonomy' => 'product_cat',
            'fields'  => 'ids'
        ] );

        if ( in_array( $menu_item->object_id, $parents ) ) {
            $classes[] = 'active';
        }

    }

    return $classes;
}
→ Ссылка