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

如何在WooCommerce中限制非CJ县用户选择Local Pickup配送?

实现WooCommerce仅CJ县城市可用自提配送功能

核心逻辑

通过WooCommerce的woocommerce_package_rates钩子,检查用户当前选择的城市是否属于CJ县允许的范围,若不属于则移除「Local Pickup」配送选项。

实现代码

将以下代码添加到你的主题functions.php文件或自定义功能插件中:

add_filter( 'woocommerce_package_rates', 'disable_local_pickup_for_non_cj_county_cities', 10, 2 );
function disable_local_pickup_for_non_cj_county_cities( $rates, $package ) {
    // 定义CJ县允许的城市列表
    $allowed_cj_cities = array( 'CLUJ-NAPOCA', 'Apahida', 'FLORESTI' );
    
    // 获取用户选择的城市(来自购物车/结账页面的地址数据)
    $selected_city = isset( $package['destination']['city'] ) ? strtoupper( $package['destination']['city'] ) : '';
    
    // 检查当前城市是否不在允许列表内
    if ( ! in_array( $selected_city, $allowed_cj_cities ) ) {
        // 遍历所有配送选项,移除Local Pickup
        foreach ( $rates as $rate_key => $rate ) {
            if ( 'local_pickup' === $rate->method_id ) {
                unset( $rates[$rate_key] );
            }
        }
    }
    
    return $rates;
}

代码说明

  • woocommerce_package_rates钩子会在购物车和结账页面计算配送费率时触发,同时覆盖两个场景的需求
  • 将用户选择的城市转为大写后对比,避免大小写不一致导致的判断错误
  • 通过method_id匹配「Local Pickup」,不依赖配送选项的显示名称,逻辑更稳定
  • 适配你使用的自定义WC_City_Select模块,无需处理用户手动输入城市的异常情况

测试验证

  1. 在购物车或结账页面选择CJ县外的城市,确认「Local Pickup」选项被隐藏
  2. 选择CLUJ-NAPOCA、Apahida或FLORESTI中的任意一个城市,确认「Local Pickup」正常显示

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 20:46:00