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

如何为同一国家设置多个WooCommerce配送区域并同时显示所有配送方式

WooCommerce多配送区域全量配送方式展示解决方案

实现原理

WooCommerce默认的配送区域匹配逻辑为检索到排序最靠前(范围最窄)的匹配配送区域后即终止检索,仅返回该区域绑定的配送方式。通过修改配送区域匹配钩子,可遍历所有符合用户收货地址的配送区域,汇总所有对应的配送方式后在结算页展示。

代码实现

将以下代码添加至站点当前活跃主题的functions.php文件,或独立自定义插件中即可生效:

// 检索所有匹配收货地址的配送区域
add_filter( 'woocommerce_shipping_zones_for_package', 'get_all_matched_shipping_zones', 10, 2 );
function get_all_matched_shipping_zones( $matched_zones, $package ) {
    $matched_zones = [];
    // 获取所有配置的配送区域+默认兜底区域
    $all_zones = WC_Shipping_Zones::get_zones();
    $all_zones[] = new WC_Shipping_Zone(0);

    foreach ($all_zones as $zone) {
        if (is_a($zone, 'WC_Shipping_Zone') && $zone->is_valid_for_package($package)) {
            $matched_zones[] = $zone;
        }
    }
    return $matched_zones;
}

// 可选:配送方式去重,避免多个区域包含相同配送方式时重复展示
add_filter( 'woocommerce_package_rates', 'deduplicate_shipping_methods', 10, 2 );
function deduplicate_shipping_methods( $rates, $package ) {
    $unique_rates = [];
    foreach ($rates as $rate_id => $rate) {
        // 以配送方式ID+配送费用作为去重标识,可按需调整规则
        $identifier = $rate->method_id . '_' . $rate->get_cost();
        if (!isset($unique_rates[$identifier])) {
            $unique_rates[$rate_id] = $rate;
        }
    }
    return $unique_rates;
}

注意事项

  • 代码生效后需清空WooCommerce缓存、浏览器缓存后测试
  • 可根据业务需求调整去重规则,或添加额外的配送方式筛选逻辑
  • WooCommerce大版本更新后建议复测功能兼容性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 19:36:03