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

如何解决Woocommerce单品页数量输入框修改时联动其他输入框的问题

修复方案

问题根因

  • 所有数量输入框未设置唯一标识,WooCommerce默认交互逻辑会将属性一致的输入框视为同一控件,触发同步修改
  • 加购按钮、图标使用了固定重复ID,导致事件绑定混乱
  • 缺少数量输入值和对应加购按钮data-quantity属性的同步逻辑,加购时无法传递正确数量

修复后代码(替换你原有functions.php中的对应代码即可)

/*Adds Quantity to product archive*/
add_filter( 'woocommerce_loop_add_to_cart_link', 'quantity_inputs_for_loop_ajax_add_to_cart', 10, 2 );
function quantity_inputs_for_loop_ajax_add_to_cart( $html, $product ) {
    if ( $product && $product->is_type( 'simple' ) && $product->is_purchasable() && $product->is_in_stock() && ! $product->is_sold_individually() ) {
        $product_id = $product->get_id();
        // 获取必要的按钮样式类
        $class = implode( ' ', array_filter( array(
                'button',
                'product_type_' . $product->get_type(),
                $product->is_purchasable() && $product->is_in_stock() ? 'add_to_cart_button' : '',
                $product->supports( 'ajax_add_to_cart' ) ? 'ajax_add_to_cart' : '',
        ) ) );

        // 给数量输入框设置带商品ID的唯一name、id属性
        $quantity_input = woocommerce_quantity_input( 
            array(
                'input_name'  => 'quantity_' . $product_id,
                'input_id'    => 'quantity_' . $product_id,
                'input_value' => 1,
            ), 
            $product, 
            false 
        );

        // 按钮ID也带上商品ID避免重复
        $cart_button = '<button type="submit" class="button alt" id="pa_add_to_cart_button_'. $product_id .'"><i class="fas fa-shopping-cart" id="pa_add_to_cart_button_icon_'. $product_id .'" style="font-size:24px; display: inline-block;"></i></button>';

        // 嵌入表单、数量字段和加购按钮
        $html = sprintf( '%s%s%s%s<a rel="nofollow" href="%s" data-quantity="1" data-product_id="%s" data-product_sku="%s" class="%s">%s</a>%s',
            '<form class="cart cart-form-' . $product_id . '">',
            '<div class="form_cart_first_half">',
            $quantity_input,
            '</div>',
            esc_url( $product->add_to_cart_url() ), 
            esc_attr( $product_id ),
            esc_attr( $product->get_sku() ),
            esc_attr( isset( $class ) ? $class : 'button' ),
            $cart_button,
            '</form>'
        );
    }
    return $html;
}

// 追加JS逻辑到页脚,处理数量变更同步和表单提交
add_action( 'wp_footer', 'sync_loop_quantity_and_add_to_cart' );
function sync_loop_quantity_and_add_to_cart() {
    ?>
    <script>
    jQuery(document).ready(function($){
        // 监听每个表单内的数量输入变化
        $('form.cart').on('change input', 'input.qty', function(){
            var $form = $(this).closest('form.cart');
            var current_qty = $(this).val();
            // 只同步当前表单内的加购按钮data-quantity属性
            $form.find('a.add_to_cart_button').attr('data-quantity', current_qty);
        });

        // 表单提交触发加购
        $('form.cart').on('submit', function(e){
            e.preventDefault();
            var $add_to_cart_btn = $(this).find('a.add_to_cart_button');
            $add_to_cart_btn.trigger('click');
        });
    });
    </script>
    <?php
}

补充说明

替换代码后清空站点缓存、浏览器缓存即可测试,所有商品的数量选择器会独立生效,不会再出现同步变更的问题,相关商品、商品列表页的加购功能也会正常传递对应数量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 09:09:02