WooCommerce购物车:修改代码实现仅覆盖同款变体商品数量
WooCommerce 变体商品购物车数量精准覆盖解决方案
原代码通过product_id匹配购物车商品,会误删同一父产品下的所有变体。要实现仅覆盖当前添加的变体数量,需针对变体商品的variation_id进行精准匹配,修改后的代码如下:
add_filter('woocommerce_add_to_cart_validation', 'update_variation_cart_quantity_before_add', 10, 5); function update_variation_cart_quantity_before_add($passed, $product_id, $quantity, $variation_id = '', $variations = array()) { // 处理变体商品:通过父产品ID+变体ID精准匹配 if (!empty($variation_id)) { foreach( WC()->cart->get_cart() as $key => $item ){ if( $item['product_id'] == $product_id && $item['variation_id'] == $variation_id ){ // 直接更新目标变体的数量 WC()->cart->set_quantity($key, $quantity); // 阻止默认添加行为,避免重复添加 return false; } } } else { // 处理简单商品:匹配父产品ID且无变体ID的项 foreach( WC()->cart->get_cart() as $key => $item ){ if( $item['product_id'] == $product_id && empty($item['variation_id']) ){ WC()->cart->set_quantity($key, $quantity); return false; } } } return $passed; }
关键改动说明
- 钩子参数扩展:将钩子的接收参数数量改为5,从而获取到变体商品的
variation_id,这是精准匹配的核心。 - 精准匹配逻辑:针对变体商品,同时校验
product_id和variation_id,确保只定位到目标变体项,不会影响同父产品的其他变体。 - 高效更新方式:使用
set_quantity直接修改购物车项数量,替代原有的删除后重新添加逻辑,更高效且避免不必要的操作。
场景验证
购物车原有:
- Product A(蓝色)×1
- Product A(红色)×1
当添加2件Product A(蓝色)时,代码会精准定位到蓝色变体的购物车项,将其数量更新为2,红色变体的数量保持1不变,完全符合需求。
内容的提问来源于stack exchange,提问作者user21054368
相关产品推荐
相关产品推荐

