Вывод товаров WooCommerce по категориям и атрибутам
Приведенный ниже код выбирает и отображает на странице товары WooCommerce принадлежащие одновременно к двум или более категориям и исключает все остальные. Так же, в сочетании с категориями, возможно использование атрибутов.
После того, как товары выбраны по заданным параметрам, их необходимо отобразить, а для этого нужно создать новый цикл. Хоть, он и описан ниже, здесь интересен не он, а запрос для показа продуктов из определенных категорий.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | <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> |
Код проверен в боевых условиях, для использования потребуется только подставить свои слаги и названия атрибутов, если есть необходимость.