发布于2026-07-20 阅读(0)
扫一扫,手机访问
本文详解如何在 WordPress 中通过 PHP 短代码,根据当前星期(周一至周五)与小时(如周一 13:00–17:00、工作日 09:00–17:00)精准判断并输出多语言客服可用性提示,修复原始逻辑中边界时间(如 17:00 整)判断失效问题。
做荷兰站点的时候,经常需要实时显示客服在不在线——比如用荷兰语告诉用户“现在能联系到我们”。这事儿看起来简单,但时间条件判断一旦处理不好,边界值(比如17:00到底算不算“可联系时段”)和星期标识方式一错,结果就全乱套了。原代码在17:00整还显示“可联系”,实际应该已经下班了,这就是典型的边界问题。
原始代码有两个关键缺陷:
date('w')(周日=0,周一=1……周六=6)虽然也能跑,但容易混淆。更推荐用 date('N')(ISO-8601 标准:周一=1,周日=7),语义清晰,也能避免周末误判。&& $time > '13' && $time < '17' 排除了13:00和17:00——也就是说13:00不触发、17:00反而被包含。正确逻辑应该是闭区间左端 + 开区间右端:>= '13' && < '17',保证13:00起生效,17:00起终止。另外,$time 是整数(date('H') 返回0–23的数字),直接用整型比较比字符串比较(比如 '13')更安全、更高效。
把下面这段代码加到主题的 functions.php 文件(或者专用插件里)就行:
// 设置时区(确保与 WordPress 设置一致)date_default_timezone_set('Europe/Amsterdam');function customer_service_phone() { $day = (int) date('N'); // 周一=1, 周日=7 $hour = (int) date('H'); // 当前小时(24小时制) // 周一:13:00–16:59 可联系 if ($day === 1 && $hour >= 13 && $hour < 17) { $message = "We zijn vandaag bereikbaar tot 17.00 uur."; } // 周二至周五:09:00–16:59 可联系 elseif ($day >= 2 && $day <= 5 && $hour >= 9 && $hour < 17) { $message = "We zijn vandaag bereikbaar tot 17.00 uur."; } // 其他所有情况(含周末、工作日早于09:00/晚于等于17:00) else { $message = "We zijn momenteel gesloten. Stuur een e-mail en we nemen z.s.m. contact met je op."; } echo esc_html($message); // 用 esc_html() 更适合输出 HTML 文本内容}add_shortcode('a vailability_phone', 'customer_service_phone');✅ 关键改进说明:
- 显式类型转换
(int)避免字符串比较陷阱;- 使用
===严格比较整数,提升健壮性;esc_html()替代esc_attr():因为输出的是页面正文文本(不是属性值),esc_html()更准确,也能防止 XSS;- 条件结构清晰分层,方便后续扩展(比如增加节假日屏蔽)。
[a vailability_phone]date_create()->modify('+2 hours') 模拟不同时段,验证每个分支是否准确触发;动态时间文案的核心,说到底就是精确的边界定义和鲁棒的数据类型处理。这个方案不光修复了原始逻辑漏洞,还提供了一个可维护、易扩展的结构。未来如果想支持多语言、节假日白名单,或者实现异步刷新(避免页面重载),可以在此基础上集成 WP REST API 或 Ja vaScript 客户端时间校验,做出更高级的交互体验。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8