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

WooCommerce移优惠券字段至cart-totals.php后按钮失效求助

解决WooCommerce优惠券字段迁移后按钮失效问题

嘿,作为WooCommerce新手碰到这种情况太正常啦!你把优惠券字段从cart.php挪到cart-totals.php后按钮失效,核心问题确实是缺了处理优惠券提交的必要JS和验证逻辑——毕竟cart.php里默认自带这些依赖,而cart-totals.php没自动加载~ 下面给你几个靠谱的解决办法:


1. 先补全完整的优惠券表单代码

你提供的代码片段不全,先把表单补全(包含必要的表单结构和安全验证字段):

<?php if ( wc_coupons_enabled() ) { ?>
    <div class="coupon">
        <h2>Aplica tu descuento exclusivo</h2>
        <div class="text-box-cupon">Si esta es tu segunda compra no olvides de usar tu cupon de descuento exlusivo.</div>
        <!-- 完整的优惠券表单 -->
        <form class="checkout_coupon woocommerce-form-coupon" method="post" style="display:block">
            <!-- 添加WooCommerce安全验证nonce -->
            <?php wp_nonce_field( 'woocommerce-apply-coupon', 'woocommerce-apply-coupon-nonce' ); ?>
            <p>
                <input type="text" name="coupon_code" class="input-text" placeholder="<?php esc_attr_e( 'Código de cupón', 'woocommerce' ); ?>" id="coupon_code" value="" />
                <button type="submit" class="button" name="apply_coupon" value="<?php esc_attr_e( 'Aplicar cupón', 'woocommerce' ); ?>"><?php esc_html_e( 'Aplicar cupón', 'woocommerce' ); ?></button>
            </p>
        </form>
    </div>
<?php } ?>

2. 添加优惠券提交的JS处理逻辑

cart-totals.php默认没加载处理优惠券提交的JS,你可以在表单后面加上这段代码,用来处理表单提交时的加载状态和请求:

<?php
if ( wc_coupons_enabled() ) {
    wc_enqueue_js( "
        jQuery( function( $ ) {
            // 监听优惠券表单提交事件
            $( 'form.checkout_coupon' ).on( 'submit', function() {
                // 提交时给购物车总计区域添加加载遮罩
                $( 'div.cart_totals' ).block({
                    message: null,
                    overlayCSS: {
                        background: '#fff',
                        opacity: 0.6
                    }
                });
            });
        });
    " );
}
?>

3. 更稳妥的方式:用WooCommerce钩子添加字段

直接硬编码到模板容易漏依赖,推荐用WooCommerce的钩子woocommerce_before_cart_totals来添加优惠券字段,这样系统会自动处理所有必要的依赖(JS、验证逻辑等),还能避免以后模板更新时你的修改被覆盖。

把这段代码放到你的子主题functions.php里就行:

add_action( 'woocommerce_before_cart_totals', 'custom_add_coupon_field_to_cart_totals' );
function custom_add_coupon_field_to_cart_totals() {
    if ( wc_coupons_enabled() ) { ?>
        <div class="coupon">
            <h2>Aplica tu descuento exclusivo</h2>
            <div class="text-box-cupon">Si esta es tu segunda compra no olvides de usar tu cupon de descuento exlusivo.</div>
            <form class="checkout_coupon woocommerce-form-coupon" method="post" style="display:block">
                <?php wp_nonce_field( 'woocommerce-apply-coupon', 'woocommerce-apply-coupon-nonce' ); ?>
                <p>
                    <input type="text" name="coupon_code" class="input-text" placeholder="<?php esc_attr_e( 'Código de cupón', 'woocommerce' ); ?>" id="coupon_code" value="" />
                    <button type="submit" class="button" name="apply_coupon" value="<?php esc_attr_e( 'Aplicar cupón', 'woocommerce' ); ?>"><?php esc_html_e( 'Aplicar cupón', 'woocommerce' ); ?></button>
                </p>
            </form>
        </div>
    <?php }
}

用钩子的方式不仅能解决按钮失效的问题,还能让你的代码更符合WooCommerce的开发规范,对新手来说更省心~

内容的提问来源于stack exchange,提问作者Elizabeth parodi roman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:49:07