You need to enable JavaScript to run this app. WooCommerce 如何判断购物车同时包含shoes与hats产品分类
优惠活动
大模型
产品
解决方案
定价
更多

WooCommerce 如何判断购物车同时包含shoes与hats产品分类

函数修改方案

核心逻辑调整说明

原函数的判断逻辑是「逐个校验每个购物车商品是否属于指定分类集合,最终要求所有商品都落在指定分类范围内才触发动作」,和当前需要的「全购物车维度判断是否同时存在shoes、hats两个分类的商品,而非只满足单个分类、也不要求所有商品都属于目标分类」的需求完全不匹配,需要做如下调整:

  • 废弃原来存储单商品布尔校验结果的数组,替换为两个独立标记位,分别记录购物车中是否出现过shoes类商品、是否出现过hats类商品
  • 遍历每个购物车商品时,单独校验商品所属分类,只要命中对应分类就将对应标记设为true
  • 遍历完成所有购物车商品后,仅当两个标记同时为真时,才触发后续的消息展示逻辑

修改后的完整可运行代码

function check_the_cart_for_categories() {
    // 初始化分类存在标记
    $has_shoes = false;
    $has_hats = false;
    // 初始化原有业务变量,避免未定义警告
    $ship_check = true;

    // 逐行遍历购物车商品
    foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
        $product = $cart_item['data'];
        // 使用WooCommerce兼容写法获取产品ID
        $product_id = $product->get_id();

        // 命中对应分类就更新标记状态
        if ( has_term( 'shoes', 'product_cat', $product_id ) ) {
            $has_shoes = true;
        }
        if ( has_term( 'hats', 'product_cat', $product_id ) ) {
            $has_hats = true;
        }
    }

    // 双分类同时存在时触发展示逻辑
    if ( $has_shoes && $has_hats && $ship_check ) {
        echo "showmessage";     
    }
} 

add_action( 'woocommerce_proceed_to_checkout' , 'check_the_cart_for_categories');
add_action( 'woocommerce_review_order_before_submit' , 'check_the_cart_for_categories');

注意事项

  • 代码中填写的shoes、hats必须和Word后台产品分类设置的别名(slug)完全一致,否则has_term()会校验失败
  • 如果后续需要补充其他分类的联合判断,只需要新增对应标记位、在遍历逻辑中补充校验规则即可
  • 如果业务上还需要限制“购物车里不能有其他分类的商品”,可以在最终判断条件里再追加对应校验规则

内容的提问来源于stack exchange,提问作者Patrick Duke Schauer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 17:45:03