如何限制Woocommerce购物车中免费小样类商品的总最大下单数量
WooCommerce免费小样订单总量限制解决方案
你提出的两种方案都可以落地,适配不同场景:
- 方案1:限制订单内所有£0商品总数量不超过5
实现最简单,仅适用于店铺内没有小样之外的其他0元商品的场景,无需额外调整现有产品配置。 - 方案2:绑定专属配送类后限制该类商品总数量不超过5
精度更高,适合店铺内同时存在其他免费活动商品的场景,不会误拦截非小样类的免费商品,更推荐使用。
代码实现(无额外插件成本,推荐)
将以下代码添加到你的店铺主题functions.php文件,或者自定义功能插件中即可生效:
// 限制免费小样单订单最高领取数量 add_action( 'woocommerce_check_cart_items', 'wc_limit_free_samples_total' ); function wc_limit_free_samples_total() { // 配置项:替换为你的免费小样配送类slug、最高允许领取数量 $sample_shipping_class = 'free-samples'; $max_sample_count = 5; $current_sample_count = 0; // 统计购物车中小样总数量 foreach ( WC()->cart->get_cart() as $item ) { $product = $item['data']; $item_shipping_class = get_term( $product->get_shipping_class_id(), 'product_shipping_class' )->slug; if ( $item_shipping_class === $sample_shipping_class ) { $current_sample_count += $item['quantity']; } } // 超出限制时抛出错误 if ( $current_sample_count > $max_sample_count ) { wc_add_notice( sprintf( '单订单最多可领取%s份免费小样,当前已选%s份,请调整后提交', $max_sample_count, $current_sample_count ), 'error' ); } }
如果要使用方案1的逻辑,只需要把统计部分的判断条件替换为价格判断即可:
if ( $product->get_price() == 0 ) { $current_sample_count += $item['quantity']; }
插件实现(无代码需求)
如果不方便修改代码,可以选择支持按配送类/商品类型限制购物车总量的WooCommerce数量管理插件,在后台配置对应规则即可,和你当前在用的Min/Max quantity插件功能兼容,不会冲突。
内容的提问来源于stack exchange,提问作者MLB_27
相关产品推荐
相关产品推荐

