ВОПРОС
У меня есть свой сайт в интернете, через который я продаю различные товары. Разумеется, для работы с ним я использую WooCommerce. А в частности, функцию WP_Query. Она мне нужна для того, чтобы запрашивать товары из определенных категорий. Для этой цели я даже написал код. И он работает именно так, как это мне нужно:
$args = array(
‘posts_per_page’ => -1,
‘product_cat’ => ‘category-slug-here’,
‘post_type’ => ‘product’,
‘orderby’ => ‘title’,
);
$the_query = new WP_Query( $args );
// The Loop
while ( $the_query->have_posts() ) {
$the_query->the_post();
echo ” . get_the_title() . ‘<br /><br />’;
}
wp_reset_postdata();
Этот метод возвращает мне все нужные данные. Но проблема в том, что теперь мне недостаточно этого функционала. Мне нужно получить идентификатор товара и настроить фильтрацию. А самое главное в этой ситуации то, что теперь мне нужно работать сразу с несколькими различными категориями.
В целом, у меня есть чувство, что аргумент product_cat – это не родной аргумент WP_Query. Скорее всего, это что-то нестандартное для WooCommerce. Для того чтобы настроить фильтрацию, я пересмотрел множество разных решений. Я даже копался в документации WooCommerce и пересмотрел все форумы. Но нигде нет той информации, которая хоть как-то помогла бы мне.
Помимо этого я пытался воспользоваться tax_query и category_and, но это тоже не дало никаких результатов. По сути, мне нужно только запросить продукты из двух разных категорий. Я думаю, что все-таки есть способ, который позволяет получить всю нужную информацию на основе идентификатора. Но я хочу избежать того, чтобы приходилось делать два запроса, чтобы начать фильтрацию.
В общем, я даже не знаю, что можно еще придумать, но может быть, у вас есть какие-то идеи на этот счет?
Полезно : Как получить категории продуктов WooCommerce в WordPress?
ОТВЕТ
Признаюсь, это было реально непросто. Я довольно-таки долго ломал голову над тем, чтобы хоть как-то решить твою проблему. Но все же я нашел одно решение:
$args = array(
‘posts_per_page’ => -1,
‘tax_query’ => array(
‘relation’ => ‘AND’,
array(
‘taxonomy’ => ‘product_cat’,
‘field’ => ‘slug’,
‘terms’ => ‘category-slug1’
),
array(
‘taxonomy’ => ‘product_cat’,
‘field’ => ‘slug’,
‘terms’ => ‘category-slug2’
)
),
‘post_type’ => ‘product’,
‘orderby’ => ‘title’,
);
$the_query = new WP_Query( $args );
Здесь используется аргумент tax_query и relation => ‘AMD’, что позволяет убедиться в том, что продукт попадает в обе категории. И я так и не понял, как можно передать ID вместо slug, но вот функция для получения slug на основе ID:
$terms = get_term($YOURID, ‘product_cat’);
$theslug = $terms->slug;