Вывод товаров WooCommerce по категориям и атрибуттам

Вывод товаров 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>

Код проверен в боевых условиях, для использования потребуется только подставить свои слаги и названия атрибутов, если есть необходимость.

Записи с такими же тегами:

Вывод товаров WooCommerce по категориям и атрибутам: 3 комментария

    1. Анатолий, у меня тоже не работало, пока не обратил внимание, что по данному коду должны быть отображены все товары, у которых ОДНОВРЕМЕННО (оператор AND) и product_cat=slug-category-1 и product_cat=slug-category-2 и атрибут pa_attribute-1=pa_attribute-1. То есть, слишком жёсткие условия (товар должен быть сразу в двух категориях, не считая тега). Закомментировал второй массив (slug-category-2) и товары сразу отобразились. Либо убедитесь, что у вас есть товары, у которых проставлены сразу обе категории.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *