Подскажите, как заменить этот код шорткода на аналогичный код, в котором используется WP_Query?
echo do_shortcode('[best_selling_products per_page="12"]');
я делал так:
$args = array(
'post_type' => 'product',
'posts_per_page' => 12,
'meta_key' => 'total_sales',
'orderby' => 'meta_value_num',
);
$wc_query = new WP_Query($args);
if ($wc_query->have_posts()) {
while ($wc_query->have_posts()) {
$wc_query->the_post();
woocommerce_product_loop_start();
wc_get_template_part( 'content', 'product' );
woocommerce_product_loop_end();
}
}
wp_reset_postdata();
но дело в том, что магазин находится ещё в разработке, а самые популярные товары уже выводятся в результате этого кода. Ведь товары ещё не продавались. Правильно ли я вывожу самые продаваемые товары?
Код правильный. Он выводит записи типа product по 12 на страницу, сортируя их по мета-полю total_sales. Пока продаж нет, у всех товаров это поле равно 0.
Значение мета-поля total_sales можно вывести в цикле после wc_get_template_parts, например:
echo get_post_meta(get_the_ID(), 'total_sales')[0];
Чтобы вывести товары, у которых число продаж больше заданного (в примере > 0), можно использовать meta_query. Два варианта цикла ниже.
echo '<h2>Самые продаваемые циклом woocommerce</h2>';
$args = array(
'post_type' => 'product',
'post_status' => 'publish',
'posts_per_page' => 12,
'meta_key' => 'total_sales',
'orderby' => 'meta_value_num',
);
$wc_query = new WP_Query($args);
if ($wc_query->have_posts()) {
while ($wc_query->have_posts()) {
$wc_query->the_post();
woocommerce_product_loop_start();
wc_get_template_part( 'content', 'product' );
echo 'Кол-во продаж: ' . get_post_meta(get_the_ID(), 'total_sales')[0];
woocommerce_product_loop_end();
}
}
wp_reset_postdata();
echo '<h2>Самые продаваемые циклом woocommerce с ограничением</h2>';
$args = array(
'post_type' => 'product',
'post_status' => 'publish',
'posts_per_page' => 12,
'orderby' => 'meta_value_num',
'meta_query' => array(
array( // Simple products type
'key' => 'total_sales',
'value' => 0,
'compare' => '>',
'type' => 'numeric'
),
),
);
$wc_query = new WP_Query($args);
if ($wc_query->have_posts()) {
while ($wc_query->have_posts()) {
$wc_query->the_post();
woocommerce_product_loop_start();
wc_get_template_part( 'content', 'product' );
echo 'Кол-во продаж: ' . get_post_meta(get_the_ID(), 'total_sales')[0];
woocommerce_product_loop_end();
}
}
wp_reset_postdata();
Результат теста здесь.
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники