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

如何在WooCommerce无购物车直连结账场景下防止商品重复加购

WooCommerce 禁止同一商品重复加入购物车解决方案

核心逻辑

你之前的代码问题是直接清空了整个购物车,导致加购其他商品(比如结账页的order bump商品)时会覆盖原有主商品。正确逻辑是加购前遍历购物车校验待加商品是否已存在,仅拦截重复的同商品加购请求,不影响其他不同商品的加购操作。

可用实现代码

将以下代码添加到主题的functions.php文件或者自定义代码片段插件中即可生效:

add_filter( 'woocommerce_add_to_cart_validation', 'prevent_duplicate_product_add_to_cart', 10, 3 );
function prevent_duplicate_product_add_to_cart( $passed, $product_id, $quantity ) {
    // 遍历当前购物车所有商品
    foreach( WC()->cart->get_cart() as $cart_item ) {
        // 判断购物车中是否已存在当前待添加的商品
        // 如果需要区分可变商品的不同属性(不同SKU算不同商品),可以额外判断 $cart_item['variation_id']
        if( $cart_item['product_id'] == $product_id ) {
            // 已存在则拦截加购请求,可自定义提示文案
            wc_add_notice( '该商品已在订单中,无需重复添加', 'error' );
            return false;
        }
    }
    // 不存在则允许正常加购
    return $passed;
}

配置说明

  • 如果你使用可变商品,且希望同一款商品的不同属性(不同SKU)可以同时加入购物车,只需要把判断条件改为if( $cart_item['product_id'] == $product_id && $cart_item['variation_id'] == $variation_id ),同时把函数参数修改为function prevent_duplicate_product_add_to_cart( $passed, $product_id, $quantity, $variation_id = 0 )即可。
  • 代码不会清空购物车原有内容,只会拦截同商品的重复加购,完全兼容结账页order bump商品的加购需求。
  • 无需搭配数量限制插件即可实现完全禁止同商品重复加购,不会出现重复加购导致的价格翻倍问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 12:39:04