Сниппет для вывода только товаров со скидкой в цикле WooCommerce
Я пытаюсь вывести только товары со скидкой в цикле WooCommerce через сниппет. Для этого я использовал код ниже, но он выводит все товары. Мне нужно вывести только товары со скидкой в цикле.
<!-- Новые товары WooCommerce -->
<ul class="products">
<?php
$args = array(
'post_type' => 'product',
'posts_per_page' => 4
);
$loop = new WP_Query( $args );
if ( $loop->have_posts() ) {
while ( $loop->have_posts() ) : $loop->the_post();
woocommerce_get_template_part( 'content', 'product' );
endwhile;
} else {
echo __( 'Товары не найдены' );
}
wp_reset_postdata();
?>
</ul>
<!-- Новые товары WooCommerce -->
Что мне нужно сделать для достижения желаемого результата?

Наконец-то я получил код. Используя код ниже, вы можете выбрать товары по акции, которые являются либо Простыми товарами со скидкой, либо Вариативными товарами со скидкой. Имейте в виду, что этот код выберет все записи, в которых вы указали акционную цену. Поэтому избегайте добавления цены в это поле (показано на прикрепленном изображении), если ваша акционная цена совпадает с оригинальной, потому что тогда это не будет товаром по акции, но данный код всё равно включит его в цикл товаров со скидкой.
<!-- WooCommerce Товары по акции -->
<ul class="products">
<?php
$args = array(
'post_type' => 'product',
'posts_per_page' => 4,
'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'
)
)
);
$loop = new WP_Query( $args );
if ( $loop->have_posts() ) {
while ( $loop->have_posts() ) : $loop->the_post();
woocommerce_get_template_part( 'content', 'product' );
endwhile;
} else {
echo __( 'Товары не найдены' );
}
wp_reset_postdata();
?>
</ul>
<!-- WooCommerce Товары по акции -->

К сожалению, у меня это не работает для вариативных товаров. Поле "_min_variation_sale_price" отсутствует. WooCommerce, вероятно, изменил это за прошедшие годы.
