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

WooCommerce限制购物车仅添加同一分类商品的代码报错问题咨询

WooCommerce购物车仅允许添加同一分类商品的修复方案

现有代码错误原因

你当前的代码逻辑存在倒置问题:只要检测到购物车内存在courses分类的商品,就会直接拦截所有加购请求并返回错误,自然无法添加同一分类下的其他商品。

修复后完整代码

add_filter( 'woocommerce_add_to_cart_validation', 'restrict_same_category_cart', 10, 3 );
function restrict_same_category_cart( $passed, $product_id, $quantity ) {
    // 定义目标商品分类,支持填写分类ID、别名、名称
    $target_category = 'courses';

    // 购物车为空时直接放行
    if( WC()->cart->is_empty() ) {
        return $passed;
    }

    // 校验当前要添加的商品是否属于目标分类
    $current_is_target = has_term( $target_category, 'product_cat', $product_id );

    // 遍历购物车已有商品,校验分类匹配情况
    foreach ( WC()->cart->get_cart() as $cart_item ) {
        $cart_is_target = has_term( $target_category, 'product_cat', $cart_item['product_id'] );
        // 新商品和已有商品分类不一致时触发拦截
        if( $current_is_target !== $cart_is_target ) {
            wc_add_notice( __('不允许同时添加课程类和其他类型的商品到购物车', 'woocommerce' ), 'error' );
            return false;
        }
    }

    return $passed;
}

逻辑说明

  • 购物车为空时,第一个加购的商品无论属于哪个分类都直接放行
  • 后续加购时,会同时校验新商品和购物车内已有商品的分类归属
  • 只有当新商品和已有商品分类不统一时才会触发报错拦截,同一分类下的多个商品可以正常加购

内容的提问来源于stack exchange,提问作者Rick-ton

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 15:27:03