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

WooCommerce中PHP代码无法禁用指定日期前免运费的问题排查

WooCommerce禁用指定日期前免运费代码失效原因及修复方案

代码失效原因

  • 日期比较逻辑不够可靠:原代码将时间戳转成字符串后比较,虽然Y-m-d格式字符串可按字典序比较,但直接用时间戳对比更精准,能避免潜在的格式转换问题。
  • 依赖固定配送方式ID:WooCommerce中免运费方式的ID不一定是free_shipping,手动添加的免运费选项ID可能带后缀(比如free_shipping:7),直接unset固定ID会匹配不到目标方式。
  • 未处理配送费率缓存:WooCommerce会缓存配送选项,即使代码修改正确,缓存未清除的话也不会立即生效。

修复后的代码

add_filter( 'woocommerce_package_rates', 'disable_free_shipping_until_certain_date', 10, 2 );

function disable_free_shipping_until_certain_date($rates, $package) {
    // 获取当前日期的时间戳(精确到当天0点)
    $current_timestamp = strtotime(date("Y-m-d"));
    // 设置禁用截止日期的时间戳(2024-02-25 0点)
    $disable_until_timestamp = strtotime('2024-02-25');

    // 当前日期早于截止日期时,禁用所有免运费选项
    if ($current_timestamp < $disable_until_timestamp) {
        // 遍历所有配送方式,匹配类型为免运费的选项
        foreach ($rates as $rate_key => $rate) {
            if ('free_shipping' === $rate->method_id) {
                unset($rates[$rate_key]);
            }
        }
    }

    return $rates;
}

注意事项

  • 清除配送费率缓存:代码生效前,需在WooCommerce后台进入「配送」设置页面,随便修改一个选项再保存,或清空网站缓存,触发配送费率缓存刷新。
  • 验证配送方式类型:如果仍不生效,可通过var_dump($rates)打印配送方式数据,确认目标免运费方式的method_id是否为free_shipping。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 07:26:05