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 的custom page template。这里的目标是避免使用 WP_Query/get_posts(),因为它们是 not recommended for product querying。
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' );