
本文介绍如何通过 wordpress 钩子和 php 时间函数,在 woocommerce 商品详情页动态显示“预估送达日期范围”,例如“estimated delivery by 24 feb, thursday to 26 feb, saturday”,并确保日期计算准确、格式可读、时区安全。
要在 WooCommerce 商品页面(single product)展示专业、可信的预估送达时间范围,推荐使用 woocommerce_single_product_summary 钩子挂载自定义函数。以下是一个完整、健壮且可直接部署的实现方案:
add_action('woocommerce_single_product_summary', 'delivery_date_range', 11);
function delivery_date_range() {
// 获取当前日期(服务器本地时间,建议配合时区设置)
$today = date('Y-m-d');
// 计算「最早送达日」:订单日后第 3 天(含当日为第 0 天 → +3 days = 第 3 个工作日后)
$date_from = date('j M, l', strtotime($today . ' + 3 days'));
// 计算「最晚送达日」:订单日后第 5 天(即 +5 days)
$date_to = date('j M, l', strtotime($today . ' + 5 days'));
$html = "
Estimated delivery by {$date_from} to {$date_to}";
echo $html;
}✅ 关键说明与最佳实践:
- date('j M, l') 输出如 24 Feb, Thursday —— j(无前导零日期)、M(缩写月份)、l(完整星期名,注意是小写 L),语义清晰且符合用户阅读习惯;
- ✨ 避免硬编码时区:原示例中 date_default_timezone_set('India') 写法错误(应为 'Asia/Kolkata'),且不推荐在函数内动态设置——请统一在 wp-config.php 中配置:
date_default_timezone_set('Asia/Kolkata');或更优方案:在 WordPress 后台 → 设置 → 常规 → 时区中正确设定,WP 会自动应用;
- ⚠️ 注意:strtotime('+3 days') 基于服务器当前时间,适用于“今日下单”的场景;如需支持购物车/结算页的实时计算(考虑下单时间而非浏览时间),应改用 JavaScript 或 AJAX 动态渲染;
- ? 可扩展性提示:若需排除周末或节假日,建议引入自定义工作日计算器(如基于 DateTime + DatePeriod 迭代判断),而非简单 +N days。
最后,建议为 .delivery-estimate 添加轻量 CSS 样式提升可读性(例如字体加粗、上边距、颜色区分),确保信息在商品页中醒目而不突兀。此方案简洁、兼容性强,适用于绝大多数 WooCommerce 主题环境。










