Во время разработки или перезапуска интернет-магазина на woocommerce возникает задача вывести акционные товары. Т.е. товары у которых снижена цена.
Сделать это можно в любом месте любого шаблона несколькими способами.
Для начала разберемся, как в woocommerce маркируются акционные товары.
Способ №1
Через шорткод:
[sale_products]
Это стандартный шорткод из набора woocommerce. Он может принимать несколько аргументов в зависимости от того, какой результат необходимо получить.
Например, шорткод ниже выведет на страницу максимальное количество привью товара — 32.
[sale_products per_page="32"]
Еще аргументы, которые может принимать шорткод:
orderby - сортировка по заданным параметрам;
order - сортировка по возрастанию или убыванию (ASC или DESC);
category - выбирает по заданным категориям продуктов;
operator - показывает как сделать так, чтобы товары выводимые по категориям присутствовали в той или иной - AND. Были в одной категории - IN, исключить из указанных - NOT IN.
Способ №2
Есть такая функция:
wc_get_product_ids_on_sale()
Она получает id товаров, у которых проставлена скидка. С помощью ее с запроса WP_Query можно получить нужный результат. Самый простой код будет выглядеть вот так:
<ul class="products">
<?php
$product_ids_on_sale = wc_get_product_ids_on_sale();
$sale_args = array(
'post_type' => 'product',
'post__in' => array_merge(array(0), $product_ids_on_sale)
);
$sale_query = new WP_Query($sale_args);
if ($sale_query->have_posts())
{while ($sale_query->have_posts() ) : $sale_query->the_post();
wc_get_template_part( 'content', 'product' );
endwhile;}
else {echo __('Продуктов не найдено'); } wp_reset_postdata(); ?>
</ul><!--/.products-->
Здесь мы готовим кастомный цикл Вордпрес с помощью нужных параметров, в том числе и массива id акционных товаров, после этого выводим шаблон привью товара в нужном месте страницы с помощью цикла.
Способ №3
Самый сложный метод, требуюущий более угрублненный знаний настроек цикла Вордпрес.
<?php
$sale_args = array(
'post_type' => 'product',
'meta_query' => array(
'relation' => 'OR',
array(
'key' => '_sale_price',
'value' => 0,
'compare' => '>',
'type' => 'numeric'
),
array(
'key' => '_min_variation_sale_price',
'value' => 0,
'compare' => '>',
'type' => 'numeric'
)
)
);
query_posts($sale_args);
?>
В этом случае мы делаем запрос с помощью параметра meta_query и получаем данные по полю _sale_price. После того как подготовили параметры, их можно передать как в query_posts так и в WP_Query.
Внимание! Этот код может не работать для вариативных товаров.