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>'; }
关键修复点说明
- 发货日期校准:通过
next weekday确保发货日始终落在工作日,避免原代码中直接加天数导致的周末问题。 - 工作日循环累加:使用循环逐天推进,仅计数工作日,严格保证累加4个有效工作日,彻底排除周末。
- 本地化兼容:
date_i18n自动适配站点语言设置,无需手动调整日期格式。
内容的提问来源于stack exchange,提问作者Giam
相关产品推荐
相关产品推荐

