WooCommerce中为超20kg商品隐藏指定配送方式的代码问题
嘿,我来帮你搞定这个WooCommerce的配送方式隐藏问题!你之前的代码片段没写完,而且漏传了钩子的关键参数,我给你补全并调整成完全符合需求的版本——只要购物车里有重量超过20kg的商品,就把指定的配送方式藏起来。
完整可运行代码
把这段代码添加到你的主题functions.php文件(更推荐用自定义代码插件比如Code Snippets,避免主题更新丢失代码):
add_filter( 'woocommerce_package_rates', 'hide_shipping_method_for_heavy_items', 10, 2 ); function hide_shipping_method_for_heavy_items( $rates, $package ) { // 设置重量阈值(单位kg,要和WooCommerce后台设置的重量单位一致) $weight_threshold = 20; // 标记购物车是否存在超重商品 $has_heavy_item = false; // 遍历当前配送包裹里的所有商品 foreach ( $package['contents'] as $cart_item ) { $product = $cart_item['data']; $product_weight = $product->get_weight(); // 只要有一件商品重量超过阈值,就触发隐藏逻辑 if ( !empty($product_weight) && $product_weight > $weight_threshold ) { $has_heavy_item = true; break; // 找到目标后直接停止遍历,提升效率 } } // 如果存在超重商品,移除指定的配送方式 if ( $has_heavy_item ) { $target_shipping_method = 'shipping_method_0_flat_rate2'; if ( isset( $rates[ $target_shipping_method ] ) ) { unset( $rates[ $target_shipping_method ] ); } } return $rates; }
关键细节说明
- 钩子参数修复:你之前的
woocommerce_package_rates钩子只传了1个参数,但这个钩子实际需要2个参数($rates和$package),这是之前代码失效的核心原因之一。 - 重量单位匹配:要确保WooCommerce后台设置的重量单位(路径:WooCommerce > 设置 > 产品 > 测量单位)是kg,如果你的店铺用的是克(g),记得把代码里的
20改成20000。 - 配送方式ID验证:如果代码生效后没效果,先去前端检查配送选项的HTML,找到对应配送方式的
value属性,确认是不是shipping_method_0_flat_rate2(有时候ID会因为店铺设置不同略有变化)。 - 缓存清除:添加代码后,记得去WooCommerce > 状态 > 工具里清除配送方式缓存,不然可能看不到即时效果。
内容的提问来源于stack exchange,提问作者Sjors
相关产品推荐
相关产品推荐

