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

WooCommerce如何在结账页显示指定配送选项?添加选项触发致命错误

解决WooCommerce结账页添加特定配送选项的致命错误问题

错误根源

你直接用array_push($rates, 'flat_rate:5')添加字符串是错的——$rates数组里的元素不是字符串,而是WC_Shipping_Rate对象,键是配送方式ID(比如flat_rate:5),值是对应的对象实例。强行插入字符串会导致WooCommerce后续处理时触发类型不匹配的致命错误。

修正后的代码

下面是可以正确添加指定配送方式的代码,核心是获取对应配送方式的对象实例再加入数组:

add_filter( 'woocommerce_package_rates', 'custom_package_rates', 10, 2 );
function custom_package_rates( $rates, $package ) {
    // 用当前包裹的内容总价更准确(支持多包裹场景)
    $total = $package['contents_cost'];

    if( $total < 100 ) {
        // 移除不需要的配送选项
        unset( $rates['advanced_free_shipping'] );

        // 检查目标配送方式是否不在当前列表中
        if ( ! isset( $rates['flat_rate:5'] ) ) {
            // 获取当前包裹匹配的配送区域
            $shipping_zone = WC_Shipping_Zones::get_zone_matching_package( $package );
            // 获取指定ID的配送方式实例
            $shipping_method = $shipping_zone->get_shipping_method( 'flat_rate:5' );

            if ( $shipping_method && $shipping_method->is_enabled() ) {
                // 创建对应的WC_Shipping_Rate对象
                $rate = new WC_Shipping_Rate(
                    'flat_rate:5',
                    $shipping_method->get_title(),
                    $shipping_method->cost,
                    $shipping_method->get_taxes(),
                    'flat_rate'
                );
                // 添加到rates数组(键必须是配送方式ID)
                $rates['flat_rate:5'] = $rate;
            }
        }
    }

    return $rates;
}

关键注意事项

  • 确保flat_rate:5这个配送方式ID正确:在WooCommerce后台配送→配送方式里编辑对应平邮方式时,可从URL中获取ID(比如URL为...post.php?post=5&action=edit,则ID为flat_rate:5)。
  • 该配送方式必须在当前用户的配送区域内启用,否则get_shipping_method会返回null,无法添加。
  • 代码生效前需清空WooCommerce缓存(后台→系统状态→工具→清除配送缓存),避免旧规则干扰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 14:40:23