WooCommerce 设置除本地自提外其他配送方式的最低订单小计金额问题
WooCommerce 设置除本地自提外其他配送方式的最低订单小计金额问题
嘿,我看了你遇到的问题啦——想给除本地自提之外的所有配送方式设置最低订单小计,但现在连自提都被限制了对吧?这是因为你原来的代码没有做配送方式的判断逻辑,导致规则对所有配送场景都生效了。
问题根源
你之前的wc_minimum_order_amount函数只是单纯检查了订单小计,完全没考虑用户选的是哪种配送方式,所以不管是快递还是自提,都会触发最低金额验证。
修复后的代码方案
我给你调整了代码,加入了配送方式的判断逻辑,只有当用户没选本地自提的时候,才会执行最低金额检查:
add_action( 'woocommerce_checkout_process', 'wc_minimum_order_amount_exclude_local_pickup' ); add_action( 'woocommerce_before_cart', 'wc_minimum_order_amount_exclude_local_pickup' ); /** * 设置最低订单金额,排除本地自提配送方式 */ function wc_minimum_order_amount_exclude_local_pickup() { // 这里改成你需要的最低订单小计金额 $minimum = 50; // 获取当前购物车的小计(不含运费、税费) $subtotal = WC()->cart->subtotal; // 获取用户已选择的配送方式 $chosen_shipping_methods = WC()->session->get('chosen_shipping_methods'); // 标记是否选择了本地自提(默认slug是local_pickup,若你自定义了配送方式,要替换成对应的slug) $is_local_pickup = false; if ( ! empty( $chosen_shipping_methods ) ) { foreach ( $chosen_shipping_methods as $method ) { if ( strpos( $method, 'local_pickup' ) !== false ) { $is_local_pickup = true; break; } } } // 非本地自提且订单金额不足时,显示错误提示 if ( ! $is_local_pickup && $subtotal < $minimum ) { // 购物车页面的提示样式 if ( is_cart() ) { wc_print_notice( sprintf( '最低订单金额为 %s,当前订单小计为 %s,请添加更多商品。', wc_price( $minimum ), wc_price( $subtotal ) ), 'error' ); } // 结账页面的提示样式 else { wc_add_notice( sprintf( '最低订单金额为 %s,当前订单小计为 %s,请添加更多商品。', wc_price( $minimum ), wc_price( $subtotal ) ), 'error' ); } } }
几个关键注意点
- 修改最低金额:把代码里的
$minimum = 50;改成你实际需要的数值就行 - 确认自提方式的slug:如果你的店铺自定义了本地自提的名称,要去WooCommerce后台的「配送」设置里,查看该配送方式的slug(比如自定义成了
store_pickup,就把代码里的local_pickup替换成这个值) - 未选择配送方式的情况:如果用户在购物车页面还没选配送方式,代码会默认执行最低金额检查——这是合理的,因为用户后续大概率会选非自提的配送方式,避免最后结账时才报错
备注:内容来源于stack exchange,提问作者Thomas Künzler
相关产品推荐
相关产品推荐

