Как сделать так чтобы фильтр работал при выбранной родительской категории, если товары находятся в подкатегориях?

Когда вы используете WordPress для создания интернет-магазина или каталога, вы часто сталкиваетесь с потребностью фильтровать товары по различным параметрам. Одним из распространенных требований является возможность фильтрации товаров по родительской категории, даже если сами товары находятся в подкатегориях.

Для реализации такого фильтра вам понадобится использовать функцию tax_query из WP_Query. Эта функция позволяет фильтровать по таксономиям, таким как категории.

Вот пример кода, показывающий, как создать фильтр, который будет работать при выбранной родительской категории, даже если товары находятся в подкатегориях:

$args = array(
    'post_type' => 'product', // указываем тип записи (ваш товар)
    'posts_per_page' => -1, // показываем все найденные записи
    'tax_query' => array(
        'relation' => 'AND', // используем операцию И для нескольких фильтров
        array(
            'taxonomy' => 'category', // указываем таксономию (категорию)
            'field' => 'slug', // используем поле slug для сравнения
            'terms' => 'родительская-категория', // указываем родительскую категорию
            'include_children' => true, // включаем подкатегории
        ),
        array(
            'taxonomy' => 'category', // указываем таксономию (категорию)
            'field' => 'slug', // используем поле slug для сравнения
            'terms' => 'подкатегория', // указываем подкатегорию
        ),
    ),
);

$query = new WP_Query($args);

if ($query->have_posts()) {
    while ($query->have_posts()) {
        $query->the_post();
        // Выводим товары, соответствующие выбранным категориям
        echo '<h2>' . get_the_title() . '</h2>';
    }
    wp_reset_postdata();
} else {
    echo 'Товары не найдены';
}

В данном примере мы создаем объект WP_Query и определяем нужные параметры фильтрации. Мы используем tax_query, чтобы указать родительскую категорию и подкатегорию, а также включить подкатегории.

Затем мы выполняем запрос и выводим результаты, используя while цикл для перебора всех найденных записей. В данном случае мы просто выводим название товара, но вы можете настроить вывод по вашим потребностям.

Обратите внимание, что после завершения цикла мы вызываем wp_reset_postdata(), чтобы сбросить контекст постов и вернуться к основному запросу, если вы используете данный код внутри других циклов.

Надеюсь, этот пример поможет вам создать фильтр, который будет работать при выбранной родительской категории, даже если товары находятся в подкатегориях.