WooCommerce商品按销量及库存状态排序需求及代码调试
WooCommerce 商品按销量+库存状态排序实现方案
需求
实现WooCommerce商品排序逻辑:
- 第一优先级:销量(受欢迎度popularity)降序
- 第二优先级:库存状态(_stock_status)升序,确保在售(instock)商品显示在顶部
解决方案代码
add_action( 'woocommerce_product_query', 'sort_by_sales_then_stock_status', 999 ); function sort_by_sales_then_stock_status( $query ) { if ( is_admin() ) return; // 构建元查询,确保包含库存状态字段 $meta_query = $query->get( 'meta_query' ) ?: []; $meta_query[] = [ 'key' => '_stock_status', 'compare' => 'EXISTS' ]; $query->set( 'meta_query', $meta_query ); // 设置排序规则:先销量降序,再库存状态升序 $query->set( 'orderby', [ 'meta_value_num' => 'DESC', // 对应销量字段total_sales 'meta_value' => 'ASC' // 对应库存状态字段_stock_status ] ); $query->set( 'meta_key', 'total_sales' ); }
代码说明
total_sales是WooCommerce内置的销量统计元字段,通过meta_value_num按数值降序排序,实现销量优先的需求_stock_status字段值为instock的商品,在升序排序中会排在outofstock之前,保证在售商品处于同销量商品的顶部- 加入
meta_query确保查询包含库存状态字段,避免排序逻辑失效 - 后台管理页面不受该逻辑影响,仅前台商品列表生效
内容的提问来源于stack exchange,提问作者Dhaval Kenia
相关产品推荐
相关产品推荐

