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

WooCommerce购物车分类组合验证:自定义分类互斥规则开发需求

自定义WooCommerce购物车分类验证规则实现方案

根据你的需求,我调整了原代码的逻辑,精准实现你指定的分类组合限制规则。下面是修改后的完整代码,直接替换你原来的代码即可:

add_filter( 'woocommerce_add_to_cart_validation', 'custom_add_to_cart_category_validation', 10, 3 ); 
function custom_add_to_cart_category_validation( $passed, $product_id, $quantity ) { 
    // 定义分类slug,方便后续修改维护
    $toys_slug = 'toys';
    $allowed_combo_slugs = array('home', 'garden', 'outfit');
    
    // 获取当前添加商品的分类slug集合
    $current_product_terms = wp_get_post_terms( $product_id, 'product_cat', array('fields' => 'slugs') );
    
    // 购物车为空时直接通过验证,无需检查
    if( WC()->cart->is_empty() ) {
        return $passed;
    }

    // 判断当前商品所属的分类组
    $is_toys_product = !empty(array_intersect($current_product_terms, array($toys_slug)));
    $is_allowed_combo_product = !empty(array_intersect($current_product_terms, $allowed_combo_slugs));

    // 遍历购物车现有商品,检查分类冲突
    foreach (WC()->cart->get_cart() as $cart_item ){
        $cart_product_terms = wp_get_post_terms( $cart_item['product_id'], 'product_cat', array('fields' => 'slugs') );
        
        // 场景1:当前添加Toys商品,购物车已有其他三类商品
        if( $is_toys_product && !empty(array_intersect($cart_product_terms, $allowed_combo_slugs)) ) {
            wc_add_notice( __( '无法添加该商品,购物车中已有非Toys类商品', 'woocommerce' ), 'error' );
            $passed = false;
            break;
        }

        // 场景2:当前添加允许组合的三类商品,购物车已有Toys商品
        if( $is_allowed_combo_product && !empty(array_intersect($cart_product_terms, array($toys_slug))) ) {
            wc_add_notice( __( '无法添加该商品,购物车中已有Toys类商品', 'woocommerce' ), 'error' );
            $passed = false;
            break;
        }
    }

    return $passed; 
}

代码逻辑说明:

  • 我把分类slug单独定义成变量,后续你要修改分类名称时,直接改这里的slug就行,不用在代码里反复查找修改
  • 先判断当前要添加的商品属于「Toys组」还是「允许组合的Home/Garden/Outfit组」
  • 遍历购物车现有商品时,只检查两种核心冲突场景,既保证规则准确,又避免多余的逻辑判断
  • 错误提示文字你可以根据自己的需求任意修改,换成英文或者更贴合你店铺风格的表述都可以

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 23:47:30