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
相关产品推荐
相关产品推荐

