Когда вы используете 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()
, чтобы сбросить контекст постов и вернуться к основному запросу, если вы используете данный код внутри других циклов.
Надеюсь, этот пример поможет вам создать фильтр, который будет работать при выбранной родительской категории, даже если товары находятся в подкатегориях.