如何在WooCommerce中实现用户首单自动免运费功能
WooCommerce 客户首单自动免运费实现方案
实现核心逻辑为:判断用户是否存在有效历史订单,无有效历史订单的用户结算时自动将运费成本置为0,全程不需要用户输入优惠码。
方法1:代码片段实现(无额外插件,推荐)
无需安装额外插件,直接将代码插入对应位置即可生效:
- 操作路径:将下方代码添加到当前使用主题的
functions.php文件末尾,也可以通过自定义代码片段插件插入,避免主题更新后代码被覆盖。
// 首单自动免运费规则 add_filter( 'woocommerce_package_rates', 'wc_first_order_free_shipping', 10, 2 ); function wc_first_order_free_shipping( $rates, $package ) { // 仅针对登录用户生效,如需支持游客可自行扩展cookie判断逻辑 if ( ! is_user_logged_in() ) return $rates; $user_id = get_current_user_id(); // 统计当前用户已完成的订单数量 $order_count = wc_get_customer_order_count( $user_id ); // 无已完成订单判定为首单,免除运费 if ( $order_count === 0 ) { foreach ( $rates as $rate_key => $rate ) { // 运费成本设为0 $rates[$rate_key]->cost = 0; // 可选:修改运费标签提示用户首单优惠 $rates[$rate_key]->label .= ' *首单免运费'; // 同步清空运费相关税费 $taxes = array(); foreach ( $rate->taxes as $key => $tax ) { $taxes[$key] = 0; } $rates[$rate_key]->taxes = $taxes; } } return $rates; } // 清空运费缓存确保规则实时生效 add_action( 'woocommerce_update_cart_action_cart_updated', 'clear_shipping_cache_after_update' ); function clear_shipping_cache_after_update() { if ( is_checkout() || is_cart() ) { WC()->cart->calculate_shipping(); } }
- 注意事项:
- 如需支持游客首单免运费,可以新增cookie逻辑:用户首次下单后设置长期有效cookie,后续访问判断存在该cookie则不触发免运费规则
- 添加代码后清空WooCommerce缓存、浏览器缓存再测试,避免旧运费缓存影响验证结果
- 可自行调整订单统计逻辑,比如排除已取消、待付款的订单,仅统计已付款/已完成的有效订单
方法2:插件实现(适合无代码基础用户)
无需写代码,通过可视化配置即可实现:
- 安装免费的
Advanced Free Shipping插件 - 进入插件规则配置页,新建一条免费运费规则
- 触发条件选择
User > Customer order count,值设置为0 - 运费规则设置为0元,优先级调整为最高
- 保存配置后即可生效
测试验证步骤
- 新建无历史订单的测试账号,加购商品进入结算页,确认运费自动变为0且显示对应提示
- 用该测试账号下单并标记为已完成,再次加购结算,确认运费恢复正常收费即可
内容的提问来源于stack exchange,提问作者Ariamehr Moradi
相关产品推荐
相关产品推荐

