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

如何通过Hook/Filter强制开启免运费?不满足条件时代码失效问题

解决WooCommerce活动日强制免运费问题

问题核心是:当订单未达后台设置的免运费最低金额时,WooCommerce不会生成free_shipping配送选项,原代码因找不到对应rate无法生效。需要主动创建并添加免运费选项到配送列表中。

解决方案代码

function force_free_shipping_on_event_day( $rates ) {
    // 设置活动日期,格式为YYYY-MM-DD,可按需调整判断逻辑
    $event_date = '2024-10-01';
    if ( date('Y-m-d') !== $event_date ) {
        return $rates; // 非活动日返回原配送选项
    }

    // 可选:移除所有现有配送选项,仅保留免运费
    // $rates = array();

    // 创建免运费配送选项
    $free_shipping_rate = new WC_Shipping_Rate();
    $free_shipping_rate->set_id( 'free_shipping:event' ); // 自定义唯一ID
    $free_shipping_rate->set_method_id( 'free_shipping' );
    $free_shipping_rate->set_label( '活动专属免运费' ); // 前端显示的配送名称
    $free_shipping_rate->set_cost( 0 );
    $free_shipping_rate->set_taxes( array() );

    // 将免运费选项加入配送列表
    $rates['free_shipping:event'] = $free_shipping_rate;

    return $rates;
}
add_filter( 'woocommerce_package_rates', 'force_free_shipping_on_event_day', 200 );

代码说明

  • 活动日期校验:通过日期对比仅在指定活动日生效,不影响日常配送规则。
  • 主动生成配送选项:直接实例化WC_Shipping_Rate对象,手动配置免运费参数,确保无论订单金额多少,该选项都会出现。
  • 灵活保留原有选项:若无需隐藏其他配送方式,可保留原有rates,用户会同时看到免运费和其他配送选项;若只想保留免运费,取消注释移除原有rates的代码即可。
  • 优先级设置:200的优先级确保在WooCommerce默认配送逻辑执行后覆盖结果。

注意事项

  • 代码需添加到主题的functions.php文件或自定义插件中。
  • 测试前请清除WooCommerce配送缓存(后台「WooCommerce > 设置 > 配送 > 配送区域」页面点击「清除缓存」),避免旧规则干扰测试结果。

内容的提问来源于stack exchange,提问作者mr.work

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 13:45:29