PAYATHON 2026

WooCommerce 如何按库存数量排序并按商品标题排列?

数据小陈

结论

为查询增加第二个排序条件:先按 _stock 数值降序排列,再按商品标题升序排列。这样,_stock 为 1 的商品会排在值为 0 的商品前面;库存值相同的商品则按标题字母顺序排列。

add_action( 'pre_get_posts', 'sort_products_by_stock_amount' );
function sort_products_by_stock_amount( $query ) {
    if (
        ! is_admin()
        && $query->is_main_query()
        && ( is_shop() || is_product_category() || is_product_tag() )
    ) {
        $query->set( 'meta_key', '_stock' );
        $query->set( 'orderby', array(
            'meta_value_num' => 'DESC',
            'title'          => 'ASC',
        ) );
    }
}

原因

原查询只指定了 meta_value_num 降序,所以会按 _stock 数值排序,但没有规定库存相同的商品如何排列。同一库存组内的商品因此没有标题排序保证。orderby 数组可以按顺序设置主要和次要排序条件。

注意事项

这段代码假设商品的 _stock 元数据能区分在售和缺货状态,例如在售商品的值为 1,缺货商品的值为 0。_stock 表示库存数量。如果商品使用独立的库存状态,或未启用库存管理而没有 _stock 值,请根据实际存储字段调整排序条件。

修改后,请分别在商店页、商品分类页和商品标签页检查排序结果。这段代码只作用于主查询,并跳过后台请求。

备注:内容仅供参考。