You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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;
}
关键细节说明
  1. 钩子参数修复:你之前的woocommerce_package_rates钩子只传了1个参数,但这个钩子实际需要2个参数($rates和$package),这是之前代码失效的核心原因之一。
  2. 重量单位匹配:要确保WooCommerce后台设置的重量单位(路径:WooCommerce > 设置 > 产品 > 测量单位)是kg,如果你的店铺用的是克(g),记得把代码里的20改成20000。
  3. 配送方式ID验证:如果代码生效后没效果,先去前端检查配送选项的HTML,找到对应配送方式的value属性,确认是不是shipping_method_0_flat_rate2(有时候ID会因为店铺设置不同略有变化)。
  4. 缓存清除:添加代码后,记得去WooCommerce > 状态 > 工具里清除配送方式缓存,不然可能看不到即时效果。

内容的提问来源于stack exchange,提问作者Sjors

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:48:06