
本文提供一个 wordpress 短代码解决方案,根据当前星期几(周一至周五)与小时(24 小时制),精准输出荷兰语客服服务状态提示,修复原逻辑中边界时间(如 17:00)判断失效的问题。
本文提供一个 wordpress 短代码解决方案,根据当前星期几(周一至周五)与小时(24 小时制),精准输出荷兰语客服服务状态提示,修复原逻辑中边界时间(如 17:00)判断失效的问题。
在构建多语言企业网站(尤其是面向荷兰用户的客服页面)时,实时显示“当前是否可联系客服”是提升用户体验的关键细节。原始代码虽逻辑清晰,但存在两个关键缺陷:一是使用 date('w')(周日为 0)导致周一对应值为 1,虽无误,但与业务语义(周一=1)不直观;更重要的是,时间比较使用了严格大于/小于(> / ——例如周一 13:00 整本应开始显示“可联系”,但原代码因 $time > '13' 为 false 而进入 else 分支,错误显示“已关闭”。
以下为优化后的完整短代码实现,已通过生产环境验证:
// 设置时区(推荐在 wp-config.php 或主题 functions.php 开头统一设置,此处为兼容性保留)
date_default_timezone_set('Europe/Amsterdam');
function customer_service_phone() {
// 使用 'N' 格式符:ISO-8601 星期编号(1=Monday, 7=Sunday),语义更清晰
$day = (int) date('N');
// 获取当前小时(0-23 的整数),强制类型转换避免字符串比较歧义
$hour = (int) date('H');
// 周一:13:00(含)至 17:00(不含)→ 注意:17:00 整属于“关闭”时段
if ($day === 1 && $hour >= 13 && $hour = 2 && $day = 9 && $hour <p><strong>关键改进说明:</strong><br>
✅ <strong>修正时间边界逻辑</strong>:将 > / = /
✅ <strong>增强类型安全</strong>:对 date() 返回值显式 (int) 转换,避免 PHP 字符串松散比较(如 '9' > '13' 为 true)引发的意外结果。<br>
✅ <strong>语义化日期标识</strong>:采用 date('N')(周一=1)替代 date('w')(周日=0),使条件判断更符合日常认知,降低维护成本。<br>
✅ <strong>输出安全升级</strong>:使用 esc_html() 替代 esc_attr(),因该短代码通常用于页面正文而非 HTML 属性中,能更准确处理特殊字符。</p><p><strong>使用方式:</strong><br>
将上述代码添加至当前主题的 functions.php 文件末尾,保存后即可在任意文章、页面或文本小工具中插入短代码:<br>[availability_phone] </p><p><strong>注意事项:</strong> </p>
- 服务器时区必须为 Europe/Amsterdam(夏令时自动生效),WordPress 后台「设置 → 通用 → 时区」建议设为“阿姆斯特丹”以保持一致。
- 若需支持分钟级精度(如精确到 16:45),可扩展为 date('Hi') 比较,但当前需求仅需小时粒度。
- 如需多语言切换,可结合 get_locale() 或 Polylang/WPML 钩子动态加载翻译文本。
此方案简洁、健壮且符合 Web 安全最佳实践,可直接部署于生产环境。










