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 ); } } }
代码说明:
woocommerce_add_cart_item_data过滤器:在商品添加到购物车前,给每个项添加唯一随机键,WooCommerce会根据这个键判断是否为不同条目,从而避免合并。woocommerce_add_to_cart动作:保留原有的多数量拆分逻辑,将单次添加的多数量商品拆分为多个数量为1的独立行,每个行都带有唯一键。
这样修改后,无论是单次添加多数量商品,还是多次添加同一件商品(数量为1),都会在购物车中生成独立的行,不会合并数量。
内容的提问来源于stack exchange,提问作者Awais Asif
相关产品推荐
相关产品推荐

