Приведенный ниже код выбирает и отображает на странице товары WooCommerce принадлежащие одновременно к двум или более категориям и исключает все остальные. Так же, в сочетании с категориями, возможно использование атрибутов.
После того, как товары выбраны по заданным параметрам, их необходимо отобразить, а для этого нужно создать новый цикл. Хоть, он и описан ниже, здесь интересен не он, а запрос для показа продуктов из определенных категорий.
Первоисточник -> Вывод товаров WooCommerce по категориям и атрибутам…
<div class="row">
<?php
// Выполнение запроса по категориям и атрибутам
$args = array(
// Использование аргумента tax_query для установки параметров терминов таксономии
'tax_query' => array(
// Использование нескольких таксономий требует параметр relation
'relation' => 'AND', // значение AND для выборки товаров принадлежащим одновременно ко всем указанным терминам
// массив для категории имеющей слаг slug-category-1
array(
'taxonomy' => 'product_cat',
'field' => 'slug',
'terms' => 'slug-category-1'
),
// массив для категории имеющей слаг slug-category-2
array(
'taxonomy' => 'product_cat',
'field' => 'slug',
'terms' => 'slug-category-2'
),
// массив для атрибута pa_attribute-1 имеющим значение attribute-1
array(
'taxonomy' => 'pa_attribute-1',
'field' => 'slug',
'terms' => 'attribute-1'
)
),
// Параметры отображения выведенных товаров
'posts_per_page' => 4, // количество выводимых товаров
'post_type' => 'product', // тип товара
'orderby' => 'title', // сортировка
);
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post();
global $product;
?>
<!-- Цикл для вывода выбранных товаров -->
<figure class="col-sm-3 product">
<a href="<?php echo get_permalink( $loop->post->ID ) ?>">
<?php woocommerce_show_product_sale_flash( $post, $product ); ?>
<?php
if (has_post_thumbnail( $loop->post->ID )) echo get_the_post_thumbnail($loop->post->ID, 'shop_catalog');
else echo '<img src="'.woocommerce_placeholder_img_src().'" alt="Placeholder" width="250px" height="250px" />';
?>
</a>
<figcaption>
<h3 class="product-title"><?php the_title(); ?></h3>
<div class="product-price"><?php echo $product->get_price_html(); ?></div>
<div class="text-center">
<?php woocommerce_template_loop_add_to_cart( $loop->post, $product ); ?>
</div>
</figcaption>
</figure>
<?php endwhile; ?>
<!-- Сброс данных запроса -->
<?php wp_reset_query(); ?>
</div>
Код проверен в боевых условиях, для использования потребуется только подставить свои слаги и названия атрибутов, если есть необходимость.
1 комментарий. Оставить новый
Доброго времени суток. Очень полезная статья. Но у меня еще появился вопрос. Подскажите, как можно реализовать внутри карточки товара некую сортировку товаров по коллекции, к которой относится данный товар. Например, есть цвета 3 штуки, нажимая на один из них, снизу должны отображаться товары этой же коллекции выбранного цвета. И это всё прям в карточке товара, чтобы покупателям не надо было заново выходить из товара и искать остальные товары этой же коллекции. Может сталкивались с таким? Опыта в php не так много, буду очень благодарна за подсказку или примерный код.