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

如何在WooCommerce中用通配符匹配nm开头优惠券以绕过最低订单限制?

解决WooCommerce优惠券绕过最低订单金额(匹配以nm开头的优惠券)

我明白你的需求——你已经给WooCommerce设置了15美元的最低订单金额,现在想让所有以nm开头的优惠券都能绕过这个限制,但之前用通配符nm*的方法不管用,对吧?

问题出在WC()->cart->has_discount()这个函数上,它只支持精确匹配单个优惠券代码,根本不识别通配符。所以咱们得换个思路:直接遍历当前购物车里已应用的所有优惠券,检查有没有以nm开头的。

来看看修改后的完整代码,关键部分我都加了注释:

add_action( 'woocommerce_checkout_process', 'wc_minimum_order_amount' );
// add_action( 'woocommerce_before_cart' , 'wc_minimum_order_amount' );
add_action( 'woocommerce_check_cart_items' , 'wc_minimum_order_amount' );

function wc_minimum_order_amount() {
    // 设置最低订单金额
    $minimum = 15;

    // 检查是否有以nm开头的优惠券被应用
    $has_valid_coupon = false;
    // 获取当前购物车中所有已应用的优惠券代码
    $applied_coupons = WC()->cart->get_applied_coupons();
    
    foreach ( $applied_coupons as $coupon_code ) {
        // 检查优惠券代码是否以'nm'开头
        if ( substr( $coupon_code, 0, 2 ) === 'nm' ) {
            $has_valid_coupon = true;
            break; // 找到一个符合条件的就不用继续循环了
        }
    }

    // 如果有符合条件的优惠券,跳过最低金额检查
    if ( $has_valid_coupon ) {
        return;
    }

    // 剩下的最低金额检查逻辑保持不变
    if ( WC()->cart->subtotal < $minimum ) {
        if( is_cart() ) {
            wc_print_notice( 
                sprintf( 
                    'You must have an order with a minimum of %s to place your order, your current order subtotal is %s.' , 
                    wc_price( $minimum ), 
                    wc_price( WC()->cart->subtotal ) 
                ), 
                'error' 
            );
        } else {
            wc_add_notice( 
                sprintf( 
                    'You must have an order with a minimum of %s to place your order, your current order total is %s.' , 
                    wc_price( $minimum ), 
                    wc_price( WC()->cart->subtotal ) 
                ), 
                'error' 
            );
        }
    }
}

关键修改点说明:

  • 用WC()->cart->get_applied_coupons()获取所有已应用的优惠券列表,而非单个匹配
  • 通过substr( $coupon_code, 0, 2 ) === 'nm'精准判断优惠券代码的前两位是否为nm,不管后续字符是什么都能匹配
  • 只要找到一个符合条件的优惠券,就标记$has_valid_coupon为true,直接跳过最低金额检查

把这段代码替换你原来的函数,就能实现所有以nm开头的优惠券绕过最低订单金额的需求啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:44:19