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

WooCommerce购物车:每次添加商品均生成独立行而非累加数量

解决WooCommerce重复添加商品时合并数量的问题

你使用的原代码仅能处理单次添加数量大于1的商品拆分,但当回到同一商品页再次添加(数量为1)时,WooCommerce会默认将商品合并到已有购物车项中,因为缺少强制区分的唯一标识。要实现每次添加都生成独立购物车行的需求,需要修改逻辑:无论添加数量多少,都给每个购物车项添加唯一自定义数据,同时保留多数量拆分的逻辑。

修改后的完整代码如下:

// 给每个添加的购物车项添加唯一标识,强制生成独立行
add_filter( 'woocommerce_add_cart_item_data', 'force_unique_cart_item', 10, 3 );
function force_unique_cart_item( $cart_item_data, $product_id, $variation_id ) {
    // 生成唯一随机键,确保每个项被视为独立条目
    $cart_item_data['unique_cart_key'] = md5( microtime() . wp_rand() );
    // 确保自定义数据不会被合并
    if ( isset( $cart_item_data['unique_cart_key'] ) ) {
        $cart_item_data['unique_key'] = $cart_item_data['unique_cart_key'];
    }
    return $cart_item_data;
}

// 拆分多数量商品为独立购物车行
add_action( 'woocommerce_add_to_cart', 'split_multiple_quantity_to_separate_items', 10, 6 );
function split_multiple_quantity_to_separate_items( $cart_item_key, $product_id, $quantity, $variation_id, $variation, $cart_item_data ) {
    if ( $quantity > 1 ) {
        // 将当前项数量设为1
        WC()->cart->set_quantity( $cart_item_key, 1 );
        
        // 循环添加剩余数量的独立项
        for ( $i = 1; $i <= $quantity - 1; $i++ ) {
            // 重新生成唯一键,避免重复
            $cart_item_data['unique_cart_key'] = md5( microtime() . wp_rand() );
            WC()->cart->add_to_cart( $product_id, 1, $variation_id, $variation, $cart_item_data );
        }
    }
}

代码说明:

  1. woocommerce_add_cart_item_data过滤器:在商品添加到购物车前,给每个项添加唯一随机键,WooCommerce会根据这个键判断是否为不同条目,从而避免合并。
  2. woocommerce_add_to_cart动作:保留原有的多数量拆分逻辑,将单次添加的多数量商品拆分为多个数量为1的独立行,每个行都带有唯一键。

这样修改后,无论是单次添加多数量商品,还是多次添加同一件商品(数量为1),都会在购物车中生成独立的行,不会合并数量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 23:55:06