You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

实现WooCommerce购物车、迷你购物车及订单按SKU排序

解决方案

你的原代码仅针对产品目录页面(商店页、分类页等)生效,因为woocommerce_get_catalog_ordering_args钩子只作用于产品目录的查询参数。要让迷你购物车、购物车、结账页及感谢页的商品按SKU排序,需要针对购物车和订单分别处理:

1. 排序购物车商品(含迷你购物车)

使用woocommerce_cart_contents钩子对购物车中的商品数组进行排序:

add_filter( 'woocommerce_cart_contents', 'sort_cart_items_by_sku' );
function sort_cart_items_by_sku( $cart_items ) {
    // 按SKU升序排序购物车商品
    usort( $cart_items, function( $item_a, $item_b ) {
        $sku_a = $item_a['data']->get_sku();
        $sku_b = $item_b['data']->get_sku();
        return strcmp( $sku_a, $sku_b );
    } );
    
    return $cart_items;
}

2. 排序订单商品(结账页、感谢页)

使用woocommerce_order_get_items钩子对订单中的商品进行排序,同时保留运费、优惠券等非商品类项目的位置:

add_filter( 'woocommerce_order_get_items', 'sort_order_items_by_sku', 10, 2 );
function sort_order_items_by_sku( $order_items, $order ) {
    // 筛选出订单中的商品类项目(排除运费、优惠券等)
    $line_items = array_filter( $order_items, function( $item ) {
        return $item->get_type() === 'line_item';
    } );

    // 按SKU升序排序商品
    usort( $line_items, function( $item_a, $item_b ) {
        $sku_a = $item_a->get_product()->get_sku();
        $sku_b = $item_b->get_product()->get_sku();
        return strcmp( $sku_a, $sku_b );
    } );

    // 合并排序后的商品与其他类型项目
    $non_line_items = array_diff_key( $order_items, $line_items );
    return array_merge( $line_items, $non_line_items );
}

使用说明

将上述代码添加到你的WordPress主题的functions.php文件中,或者自定义插件的代码文件里即可生效。两个函数分别覆盖了:

  • 迷你购物车、购物车页面的商品排序
  • 结账页订单预览、感谢页订单详情的商品排序

内容的提问来源于stack exchange,提问作者Christophe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 23:52:49