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

WooCommerce按产品ID隐藏多个配送方式时unset报错如何解决?

WooCommerce指定商品隐藏配送方式代码修复方案

错误原因

原代码报错的核心问题是unset()不支持直接传入数组作为键来批量移除元素,$method_ids是存储多个配送方式ID的数组,无法直接作为$rates数组的键使用。

修正后完整代码

add_filter( 'woocommerce_package_rates', 'specific_products_shipping_methods_hide_many', 10, 2 );
function specific_products_shipping_methods_hide_many( $rates, $package ) {

    $product_ids = array( 240555 ); // 此处设置对应产品ID数组
    $method_ids = array( 'flat_rate:7', 'flat_rate:13', 'flat_rate:26', 'flat_rate:27', 'local_pickup:24' ) ; // 此处设置需要隐藏的配送方式ID数组
    $found = false;

    // 遍历购物车商品核对指定产品ID
    foreach( $package['contents'] as $cart_item ) {
        if ( in_array( $cart_item['product_id'], $product_ids ) ){
            $found = true;
            break;
        }
    }
    
    // 找到指定商品后批量隐藏对应配送方式
    if ( $found ) {
        foreach ( $method_ids as $method_id ) {
            // 先判断配送方式存在再移除,避免抛出未定义索引警告
            if ( isset( $rates[$method_id] ) ) {
                unset( $rates[$method_id] );
            }
        }
    }

    return $rates;
}

生效注意事项

代码部署后需要清空WooCommerce缓存才能正常生效:

  • 进入WordPress后台 > WooCommerce > 状态 > 工具
  • 点击「清除购物车缓存」和「清除WooCommerce临时数据」
  • 如有安装页面缓存插件,也需要同步清空站点缓存

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 08:54:04