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

WooCommerce每第10单循环应用10%折扣代码问题求助

原代码失效原因

你的代码存在几个直接导致功能无法运行的问题:

  • 函数名不匹配:钩子挂载时写的函数名带空格discount_based_on_10 orders,和实际定义的函数名不一致,会直接触发PHP致命错误,代码完全不执行。
  • 核心逻辑缺失:没有获取当前登录用户的历史已完成订单数,直接写死$total_orders = 10,根本无法对应用户的实际订单情况。
  • 语法与变量错误:存在非法变量名$10、未定义变量$order_number、大括号不匹配、sprintf占位符和传入参数数量不匹配、调用不存在的wc_format_order()函数等多个语法问题。
  • 判断逻辑错误:没有做「订单数是10的倍数」的循环判断,也没有排除当前正在结算的订单,会导致折扣触发条件完全错误。
  • 兼容性问题:旧的add_discount()方法在新版WooCommerce中兼容性不佳,建议用官方推荐的优惠券操作方法。

正确实现代码

将以下代码替换原有代码,放到主题functions.php文件或者自定义代码插件中即可。注意你提前创建的优惠券码必须和代码中$coupon_code的值完全一致(大小写、空格都要匹配,建议把优惠券名改成无空格的纯英文格式,比如every_10_discount,减少匹配出错概率),优惠券本身要设置为10%固定百分比折扣,不需要额外设置使用限制。

// 每累计10笔已完成订单,当前订单享受10%折扣,循环生效
add_action('woocommerce_before_calculate_totals', 'discount_based_on_every_10_orders');
function discount_based_on_every_10_orders( $cart ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return;
    if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 ) return;

    // 基础配置
    $coupon_code = '10 Or More Discount'; // 提前创建好的优惠券码
    $order_threshold = 10; // 每多少笔订单触发折扣

    // 未登录用户不触发规则,需要游客支持可根据邮箱单独扩展逻辑
    if ( ! is_user_logged_in() ) return;
    $user_id = get_current_user_id();

    // 统计当前用户历史已完成订单数(排除当前正在结算的订单)
    $customer_orders = wc_get_orders( array(
        'customer_id' => $user_id,
        'status'      => array( 'wc-completed' ), // 仅统计已完成订单,需要包含已付款待发货状态可加'wc-processing'
        'return'      => 'ids',
        'limit'       => -1,
    ) );
    $completed_order_count = count( $customer_orders );
    // 当前订单结算后总订单数为历史数+1,判断是否为10的倍数
    $is_qualified = ( ( $completed_order_count + 1 ) % $order_threshold === 0 );

    $applied_coupons = $cart->get_applied_coupons();
    $coupon_code = sanitize_text_field( $coupon_code );

    // 符合条件自动叠加优惠券
    if ( $is_qualified && ! in_array( $coupon_code, $applied_coupons ) ) {
        $cart->apply_coupon( $coupon_code );
        wc_clear_notices();
        wc_add_notice( sprintf(
            __("恭喜!您已累计完成%s笔订单,本次订单自动享受10%%折扣!", "woocommerce"),
            '<strong>' . ( $completed_order_count + 1 ) . '</strong>'
        ), "success" );
    }
    // 不符合条件自动移除误加的优惠券
    elseif ( ! $is_qualified && in_array( $coupon_code, $applied_coupons ) ) {
        $cart->remove_coupon( $coupon_code );
    }
}

快速测试方法

不需要修改正式用户数据,按以下步骤验证即可:

  1. 新建一个测试用户账号,在后台手动给这个账号创建9笔状态为「已完成」的测试订单(订单金额填0即可,不需要真实支付)。
  2. 用测试用户登录前台,任意加购商品进入结算页,此时应自动触发10%折扣(加上当前订单刚好是第10笔)。
  3. 再给测试用户手动新增1笔已完成订单,此时累计已完成订单为10笔,再下单不应触发折扣;累计到19笔已完成订单时,再次下单就会触发第20笔的折扣,以此类推验证循环逻辑。
  4. 如果折扣未触发,优先检查优惠券码是否和代码中完全一致、优惠券是否设置了最低消费/指定商品等不必要的限制。

内容的提问来源于stack exchange,提问作者Web Honey Digital

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 16:28:03