Woocommerce添加同款商品时仅删除购物车原有同款商品的实现咨询
WooCommerce 添加商品时覆盖原有同款商品实现方案
你可以通过遍历购物车匹配目标商品ID,找到对应购物车项的唯一标识后调用删除方法实现精准删除,完整实现代码如下:
function wdm_replace_existing_cart_item( $cart_item_data, $product_id, $variation_id ) { global $woocommerce; // 遍历当前购物车所有商品项 foreach ( $woocommerce->cart->get_cart() as $cart_item_key => $cart_item ) { // 适配普通商品/变体商品的匹配规则 $target_id = $variation_id > 0 ? $variation_id : $product_id; $cart_item_id = $cart_item['variation_id'] > 0 ? $cart_item['variation_id'] : $cart_item['product_id']; // 匹配到同款商品时执行删除 if ( $cart_item_id === $target_id ) { $woocommerce->cart->remove_cart_item( $cart_item_key ); break; } } return $cart_item_data; } // 挂载到Woocommerce添加购物车前置钩子 add_filter( 'woocommerce_add_cart_item_data', 'wdm_replace_existing_cart_item', 10, 3 );
代码逻辑说明
- 无需额外添加
if ( $in_cart )判断,遍历逻辑本身会自动识别商品是否在购物车中,不存在匹配项时不会执行任何删除操作 - 同时支持普通商品和多属性变体商品的匹配,优先匹配变体ID保证同商品不同属性不会被误删
remove_cart_item方法仅删除指定唯一标识的购物车项,不会影响购物车中其他不同商品
内容的提问来源于stack exchange,提问作者wp-ap
相关产品推荐
相关产品推荐

