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);
关键修复点说明
- 修改
step属性:直接修改数量输入框的原生step属性,这是控制增减步长的核心 - 添加
min属性:可选但实用,防止用户输入小于变体重量的无效数值 - 触发多事件同步:同时触发
change和input事件,确保WooCommerce的数量增减按钮、价格计算等逻辑同步更新 - 单位兼容处理:通过正则过滤掉重量中的非数字字符,避免因
variation.weight带单位(如"0.5kg")导致的解析错误
内容的提问来源于stack exchange,提问作者MohsenJames Amra
相关产品推荐
相关产品推荐

