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

如何通过短代码显示WooCommerce优惠券输入框并实现结算页应用

WooCommerce 自定义优惠券输入框适配方案

核心调整逻辑

原方案仅实现了短代码输出优惠券输入框的基础功能,我们主要新增3部分逻辑适配需求:

  • 复用WooCommerce原生优惠券校验规则,自动核验优惠券的有效期、使用门槛、适用商品范围、剩余可用额度等所有规则
  • 提交优惠券后自动写入购物车会话数据,打开结算页直接识别已应用的优惠券,无需用户重复输入
  • 新增前端实时反馈,校验成功/失败都在当前页直接提示,无需跳转

完整可用代码

将以下代码添加到当前主题的functions.php文件,或自定义功能插件中即可生效:

// 注册优惠券输入框短代码
add_shortcode('custom_coupon_field', 'custom_coupon_input_shortcode');
function custom_coupon_input_shortcode() {
    // 购物车为空时不显示输入框,可按需删除该判断
    if (is_admin() || !WC()->cart || WC()->cart->is_empty()) return '';
    
    ob_start();
    ?>
    <div class="custom-coupon-wrapper">
        <input type="text" name="custom_coupon_code" id="custom_coupon_code" placeholder="请输入优惠券码">
        <button type="button" id="custom_coupon_submit">应用优惠券</button>
        <div class="custom-coupon-notice" style="margin-top: 10px; display: none;"></div>
        <?php wp_nonce_field('custom_coupon_nonce', 'custom_coupon_nonce_field'); ?>
    </div>
    <script>
    jQuery(document).ready(function($){
        $('#custom_coupon_submit').on('click', function(){
            const couponCode = $('#custom_coupon_code').val().trim();
            const $notice = $('.custom-coupon-notice');
            if (!couponCode) {
                $notice.html('请输入优惠券码').css('color','red').show();
                return;
            }
            $.ajax({
                url: '<?php echo admin_url('admin-ajax.php'); ?>',
                type: 'POST',
                data: {
                    action: 'apply_custom_coupon',
                    coupon_code: couponCode,
                    nonce: $('#custom_coupon_nonce_field').val()
                },
                success: function(res) {
                    if (res.success) {
                        $notice.html(res.data).css('color','green').show();
                        setTimeout(() => $notice.fadeOut(), 3000);
                        // 如需应用成功后刷新页面,可在此处添加 location.reload()
                    } else {
                        $notice.html(res.data).css('color','red').show();
                    }
                }
            })
        })
    })
    </script>
    <?php
    return ob_get_clean();
}

// 处理AJAX优惠券提交与校验
add_action('wp_ajax_apply_custom_coupon', 'apply_custom_coupon_handler');
add_action('wp_ajax_nopriv_apply_custom_coupon', 'apply_custom_coupon_handler');
function apply_custom_coupon_handler() {
    // 安全校验
    if (!isset($_POST['nonce']) || !wp_verify_nonce($_POST['nonce'], 'custom_coupon_nonce')) {
        wp_send_json_error('请求非法,请刷新页面重试');
    }
    if (empty($_POST['coupon_code'])) {
        wp_send_json_error('请输入优惠券码');
    }
    $coupon_code = sanitize_text_field($_POST['coupon_code']);
    
    // 调用WooCommerce原生方法,自动完成所有规则校验并应用优惠券
    $applied = WC()->cart->apply_coupon($coupon_code);
    
    if ($applied) {
        wp_send_json_success('优惠券应用成功,结算时自动抵扣');
    } else {
        // 提取WooCommerce原生错误提示返回
        $notices = wc_get_notices('error');
        $error_msg = '';
        if (!empty($notices)) {
            foreach ($notices as $notice) {
                $error_msg .= wp_kses_post($notice['notice']);
            }
            wc_clear_notices();
        }
        wp_send_json_error($error_msg ?: '优惠券应用失败,请检查券码是否正确');
    }
    wp_die();
}

// 可选:结算页已应用优惠券时隐藏默认优惠券输入框,不需要可删除本段
add_action('woocommerce_before_checkout_form', 'hide_checkout_coupon_if_applied', 5);
function hide_checkout_coupon_if_applied() {
    if (WC()->cart->has_discount()) {
        add_filter('woocommerce_coupons_enabled', '__return_false');
    }
}

使用方法

  • 需要展示优惠券输入框的位置,直接插入短代码[custom_coupon_field]即可,支持放在文章、页面、侧边栏小工具等任意位置
  • 优惠券所有校验规则完全复用WooCommerce后台配置的规则,无需额外单独设置
  • 优惠券应用成功后,打开WooCommerce结算页会自动显示已抵扣的金额,无需用户重复输入

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 15:21:00