total_sales
может быть установлено в запросе с помощью meta_key
.
После того, как вы вернете результаты запроса, вам просто нужно просмотреть их и вывести любые необходимые вам атрибуты.
$args = array(
'limit' => '10',
'orderby' => array( 'meta_value_num' => 'DESC', 'title' => 'ASC' ),
'meta_key' => 'total_sales',
);
$query = new WC_Product_Query( $args );
$products = $query->get_products();
if ( $products ) {
foreach ( $products as $product ) {
echo $product->get_name(); // Here, we're just listing each product's name
}
} else {
echo __( 'No products found' );
}
Обновление
В этом обновлении мы теперь используем результаты wc_get_products()
для пользовательского шаблона страницы , адаптированного из archive-product.php
.Цель здесь состояла в том, чтобы избежать использования WP_Query / get_posts (), так как они не рекомендуются для запросов продукта .
wc_get_products и WC_Product_Query предоставляют стандартный способ получения продуктов, который является безопаснымиспользовать и не сломается из-за изменений базы данных в будущих версиях WooCommerce.Создание пользовательских запросов WP_Queries или базы данных может привести к поломке кода в будущих версиях WooCommerce, поскольку данные перемещаются в сторону пользовательских таблиц для повышения производительности.Это лучший способ для разработчиков плагинов и тем извлекать несколько продуктов.wc_get_products и WC_Product_Query похожи на WordPress get_posts и WP_Query.Точно так же, как и вы, вы передаете массив аргументов, определяющих критерии поиска.
Теперь мы можем получить тот же макет / стили, что и у обычных категорий товаров / архивных страниц, но снаш запрос топ-продавцов.У нас есть название продукта, изображение, цена и кнопка «добавить в корзину», а также все стили WooCommerce / темы, примененные без необходимости создавать все с нуля, как в предыдущем методе (см. Выше).
Протестировано иработает в WooCommerce 3.5.6
defined( 'ABSPATH' ) || exit;
get_header( 'shop' );
do_action( 'woocommerce_before_main_content' );
?>
<header class="woocommerce-products-header">
<?php if ( apply_filters( 'woocommerce_show_page_title', true ) ) : ?>
<h1 class="woocommerce-products-header__title page-title"><?php echo get_the_title(); ?></h1>
<?php endif; ?>
</header>
<?php
if ( ! function_exists( 'wc_get_products' ) ) {
return;
}
echo '<div class="woocommerce">'; // needed for default styles
$top_selling_products = wc_get_products( array(
'meta_key' => 'total_sales', // our custom query meta_key
'return' => 'ids', // needed to pass to $post_object
'orderby' => array( 'meta_value_num' => 'DESC', 'title' => 'ASC' ), // order from highest to lowest of top sellers
) );
if ( $top_selling_products ) {
do_action( 'woocommerce_before_shop_loop' );
woocommerce_product_loop_start();
foreach ( $top_selling_products as $top_selling_product ) {
$post_object = get_post( $top_selling_product );
setup_postdata( $GLOBALS['post'] =& $post_object );
do_action( 'woocommerce_shop_loop' );
wc_get_template_part( 'content', 'product' );
}
wp_reset_postdata();
woocommerce_product_loop_end();
do_action( 'woocommerce_after_shop_loop' );
} else {
do_action( 'woocommerce_no_products_found' );
}
echo '</div><!-- .woocommerce -->';
do_action( 'woocommerce_after_main_content' );
do_action( 'woocommerce_sidebar' );
get_footer( 'shop' );