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

WooCommerce特定配送方式存在时隐藏其他方式代码排查求助

问题排查与修正

你的代码核心逻辑错误:你在检查商品的配送分类是否为alg_wc_shipping:31,但实际需求是检查当前可用的配送方式中是否存在alg_wc_shipping:31。

修正后的代码

function hide_shipping_when_alg_wc_shipping_31_is_present( $rates, $package ) {
    // 检查可用配送方式中是否存在 alg_wc_shipping:31
    $has_target_rate = false;
    foreach ( $rates as $rate ) {
        if ( $rate->get_method_id() === 'alg_wc_shipping:31' ) {
            $has_target_rate = true;
            break;
        }
    }

    // 如果存在,隐藏指定配送方式
    if ( $has_target_rate ) {
        foreach ( $rates as $key => $rate ) {
            $method_id = $rate->get_method_id();
            if ( $method_id === 'alg_wc_shipping:30' || $method_id === 'alg_wc_shipping:29' ) {
                unset( $rates[$key] );
            }
        }
    }

    return $rates;
}
add_filter( 'woocommerce_package_rates', 'hide_shipping_when_alg_wc_shipping_31_is_present', 99, 2 );

关键修正点

  • 把检查对象从商品配送分类改成了可用配送方式,直接遍历$rates数组判断目标配送方式是否存在
  • 提高钩子优先级到99,确保你的代码在其他可能修改配送方式的插件之后执行
  • 简化判断逻辑,直接对比method_id,避免数组查询的多余开销

额外注意事项

  1. 保存代码后,必须清空WooCommerce的配送缓存:进入WooCommerce设置→配送→点击"清除缓存"按钮,否则旧的配送方式数据会被缓存,新代码不会立即生效
  2. 确认你的配送方式ID确实是alg_wc_shipping:31/30/29,可以通过开启WooCommerce调试模式,打印$rates数组来确认真实ID

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 19:58:20