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

WooCommerce:按商品变体重量调整数量选择器步长及初始值

WooCommerce可变商品:根据变体同步数量选择器的初始值与步长

你的问题核心是只修改了数量输入框的数值,未同步更新step属性,同时WooCommerce默认的数量增减按钮会读取初始的step值,导致步长调整不生效。以下是修复后的完整方案:

现有PHP代码无需修改

你的PHP脚本已经正确加载了自定义JS,保持原样即可:

function enqueue_custom_scripts() {
    wp_enqueue_script( 'custom-script', get_stylesheet_directory_uri() . '/js/custom-script.js', array( 'jquery' ), '1.0', true );
}
add_action( 'wp_enqueue_scripts', 'enqueue_custom_scripts' );

修改后的JS代码

(function($) {
    // 监听变体选中事件
    $(document).on('found_variation', function(event, variation) {
        // 提取变体重量(自动过滤单位,确保是纯数字)
        var variationWeight = parseFloat(variation.weight.replace(/[^\d.]/g, ''));
        
        // 定位数量输入框元素
        var quantityInput = $('input[name="quantity"]');
        
        // 同步更新步长、最小值与初始值
        quantityInput
            .attr('step', variationWeight) // 设置增减步长
            .attr('min', variationWeight)  // 可选:限制最小购买量为变体重量
            .val(variationWeight);         // 设置初始数量
        
        // 触发事件确保WooCommerce控件同步状态
        quantityInput.trigger(['change', 'input']);
    });

    // 可选:处理变体未选中时的重置(回到默认状态)
    $(document).on('reset_data', function() {
        var quantityInput = $('input[name="quantity"]');
        quantityInput
            .attr('step', 1)
            .attr('min', 1)
            .val(1);
        quantityInput.trigger(['change', 'input']);
    });
})(jQuery);

关键修复点说明

  1. 修改step属性:直接修改数量输入框的原生step属性,这是控制增减步长的核心
  2. 添加min属性:可选但实用,防止用户输入小于变体重量的无效数值
  3. 触发多事件同步:同时触发change和input事件,确保WooCommerce的数量增减按钮、价格计算等逻辑同步更新
  4. 单位兼容处理:通过正则过滤掉重量中的非数字字符,避免因variation.weight带单位(如"0.5kg")导致的解析错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 16:23:03