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

WooCommerce购物车含ambient商品时仍需校验chilled类最小下单量问题

问题根因

你代码的bug出在校验规则的触发条件上:遍历完所有购物车商品后,$product变量保存的是购物车最后一个商品的信息。如果最后一个商品是ambient类目,那has_term( 'chilled', 'product_cat', $product['product_id'] )这个判断就会返回假,哪怕前面有chilled类商品也不会触发校验逻辑,这就是添加其他类目商品后规则失效的核心原因。
你完全不需要判断最后一个商品的类目,只要统计到的$total_protein大于0(说明购物车有chilled类商品)同时小于最小数量3,就触发报错即可。

修正后代码
// 设置结账前冷藏类商品的最低购买数量
add_action( 'woocommerce_check_cart_items', 'protein_set_min_total' );
function protein_set_min_total() {
    // 仅在购物车或结账页面运行
    if( is_cart() || is_checkout() ) {

        global $woocommerce;
      
        // 设置冷藏类商品最低购买数量,初始化计数变量
        $minimum_protein = 3;
        $total_protein = 0;

        // 遍历购物车所有商品统计冷藏类数量
        foreach ( $woocommerce->cart->cart_contents as $product ) :
            if ( has_term( 'chilled', 'product_cat', $product['product_id'] ) ) {
               $total_protein += $product['quantity'];
            }
        endforeach;
      
        // 只要购物车有冷藏类商品且数量不足3就触发报错
        if ( $total_protein > 0 && $total_protein < $minimum_protein) {
            wc_add_notice( sprintf( '<strong>结账前需要至少购买%s件冷藏类目商品</strong>'
            . '<br />当前购物车内冷藏类商品数量:%s',
                $minimum_protein,
                $total_protein ),
            'error' );
        }
    }
}
额外优化说明
  • 删掉了没用的全局变量$product、未使用的计数变量$i和$cat_in_cart,精简代码
  • 修正了原来的HTML转义字符错误,把&gt;改回正常的>符号
  • 逻辑判断更直接,不会受其他类目商品的影响,只要存在冷藏类商品就会校验数量要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 09:24:02