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

WooCommerce商品页预计送达时间代码修复求助:未排除周末

WooCommerce 预计送达时间修复方案(排除周末)

原代码核心问题

  • 时间戳操作错误:$delivery_date = $shipping_date + 2; 是给时间戳加2秒而非2天,逻辑完全错误。
  • 工作日计算逻辑缺失:仅单次判断周末,未通过循环遍历累加4个工作日,无法彻底跳过周六、周日。
  • 分支逻辑混乱:else分支直接加4天,未排除周末,必然导致送达日期包含休息日。

修复后的完整代码

替换你当前functions.php中的对应函数:

add_action('woocommerce_before_add_to_cart_form', 'display_delivery_estimate');

function display_delivery_estimate() {
    $now = current_time('timestamp');
    $cutoff_hour = 13;
    $required_working_days = 4;

    // 确定发货起始日期(遵循13点截止规则)
    if (date('H', $now) >= $cutoff_hour) {
        // 超过截止时间,先加1天再跳至下一个工作日
        $shipping_date = strtotime('+1 day', $now);
        $shipping_date = strtotime('next weekday', $shipping_date);
    } else {
        // 未超过截止时间,次日作为起始日并确保是工作日
        $shipping_date = strtotime('+1 day', $now);
        $shipping_date = strtotime('next weekday', $shipping_date);
    }

    // 累加4个工作日计算送达日期
    $delivery_date = $shipping_date;
    $days_counted = 0;

    while ($days_counted < $required_working_days) {
        $delivery_date = strtotime('+1 day', $delivery_date);
        // 仅当当天是工作日(周一至周五)时计数
        if (date('N', $delivery_date) <= 5) {
            $days_counted++;
        }
    }

    // 如需意大利语可替换为原文本 "Consegna stimata tra"
    echo '<p>预计送达时间:' . date_i18n('l, j F', $shipping_date) . ' - ' . date_i18n('l, j F', $delivery_date) . '</p>';
}

关键修复点说明

  1. 发货日期校准:通过next weekday确保发货日始终落在工作日,避免原代码中直接加天数导致的周末问题。
  2. 工作日循环累加:使用循环逐天推进,仅计数工作日,严格保证累加4个有效工作日,彻底排除周末。
  3. 本地化兼容:date_i18n自动适配站点语言设置,无需手动调整日期格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 03:34:55