WooCommerce配置数量规则时默认输入值在商品/购物车页不生效
问题说明
需要为站点所有商品统一配置以下数量规则:
- 最小购买数量(Min Qty):6
- 最大购买数量(Max Qty):240
- 数量步长(Quantity Step):6
- 数量输入框默认值(Input Value):6
当前配置完成后,最小/最大购买限制、数量步长规则均能正常执行,但商品详情页、购物车页的数量输入框默认值未按预期生效,原有实现代码如下:
/** * Adjust the quantity input values */ add_filter( 'woocommerce_quantity_input_args', 'jk_woocommerce_quantity_input_args', 10, 2 ); // Simple products function jk_woocommerce_quantity_input_args( $args, $product ) { if ( is_singular( 'product' ) ) { $args['input_value'] = 6; } $args['max_value'] = 240; // Maximum value $args['min_value'] = 6; // Minimum value $args['step'] = 6; // Quantity steps return $args; } add_filter( 'woocommerce_available_variation', 'jk_woocommerce_available_variation' ); // Variations function jk_woocommerce_available_variation( $args ) { $args['max_qty'] = 240; // Maximum value (variations) $args['min_qty'] = 6; // Minimum value (variations) return $args; }
故障原因
- 原代码仅在商品详情单页的判断分支中设置了简单商品的
input_value,未覆盖购物车场景、商品列表页等其他位置的数量输入框 - 可变商品的钩子回调中缺失
input_value(默认值)、step(步长)参数配置,导致可变商品选中规格后默认值、步长不生效 - 购物车场景下数量输入框默认读取购物车已存储的商品数量,原逻辑未对首次加载的默认值做兼容处理
修复后完整代码
直接替换原有代码为以下内容即可:
/** * 全局调整商品数量输入规则(简单商品、所有非购物车场景) */ add_filter( 'woocommerce_quantity_input_args', 'jk_woocommerce_quantity_input_args', 10, 2 ); function jk_woocommerce_quantity_input_args( $args, $product ) { // 非购物车页面统一设置默认值为6,购物车页面保留用户已选数量 if ( ! is_cart() ) { $args['input_value'] = 6; } $args['max_value'] = 240; $args['min_value'] = 6; $args['step'] = 6; return $args; } /** * 调整可变商品的数量规则 */ add_filter( 'woocommerce_available_variation', 'jk_woocommerce_available_variation', 10, 3 ); function jk_woocommerce_available_variation( $args, $product, $variation ) { $args['max_qty'] = 240; $args['min_qty'] = 6; $args['input_value'] = 6; $args['step'] = 6; return $args; } /** * 兼容购物车页数量输入规则 */ add_filter( 'woocommerce_cart_item_quantity', 'jk_fix_cart_quantity_input', 10, 3 ); function jk_fix_cart_quantity_input( $product_quantity, $cart_item_key, $cart_item ) { $product = $cart_item['data']; $args = array( 'input_value' => $cart_item['quantity'] < 6 ? 6 : $cart_item['quantity'], 'max_value' => 240, 'min_value' => 6, 'step' => 6, ); return woocommerce_quantity_input( $args, $product, false ); }
验证说明
代码添加后清空站点缓存、购物车缓存测试:
- 商品详情页(含简单商品、可变商品选完规格后)数量输入框默认显示6
- 购物车页新加入的商品默认数量为6,手动修改过的数量会正常保留,同时受最小6、最大240、步长6的规则限制
- 商品列表页、其他调用数量输入框的位置均会遵循统一规则
内容的提问来源于stack exchange,提问作者smilicus
相关产品推荐
相关产品推荐

