如何在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模块,无需处理用户手动输入城市的异常情况
测试验证
- 在购物车或结账页面选择CJ县外的城市,确认「Local Pickup」选项被隐藏
- 选择CLUJ-NAPOCA、Apahida或FLORESTI中的任意一个城市,确认「Local Pickup」正常显示
内容的提问来源于stack exchange,提问作者GFT
相关产品推荐
相关产品推荐

