
本文详解 WordPress 中 get_the_modified_time() 与 get_post_modified_time() 的关键区别,指出因时间格式不一致导致的误判问题,并提供可直接使用的修复代码及最佳实践建议。
本文详解 wordpress 中 `get_the_modified_time()` 与 `get_post_modified_time()` 的关键区别,指出因时间格式不一致导致的误判问题,并提供可直接使用的修复代码及最佳实践建议。
在 WordPress 主题开发中,常需根据文章是否被编辑过,动态显示“发布日期”或“更新日期”。但许多开发者会遇到一个典型问题:即使文章从未修改,页面仍错误地显示“已更新于……”。根本原因在于时间比较逻辑存在函数误用——你当前代码中混用了两个行为不同的内置函数:
<?php if (get_post_modified_time() != get_the_time()) { ?>
<li class="post-update">بروزرسانی شده در <?php echo the_modified_time('d F Y'); ?></li>
<?php } else { ?>
<li><?php the_date('d F Y'); ?></li>
<?php } ?>该代码的问题在于:
✅ get_the_time() 默认返回字符串格式(如 '2023-05-10'),其输出受当前 date_format 设置影响;
❌ get_post_modified_time() 默认返回 Unix 时间戳(整数),而 get_the_time() 返回的是格式化后的字符串——两者类型与精度均不匹配,直接比较必然失效。
正确做法是统一使用同类型、同格式的时间值进行比较。推荐方案是改用 get_the_modified_time(),它与 get_the_time() 行为对称:二者默认均返回格式化字符串(格式由后台「设置 → 常规 → 日期格式」决定),且支持相同参数:
<?php
$published = get_the_time('U'); // 获取发布时间的时间戳(推荐用于精确比较)
$modified = get_the_modified_time('U'); // 获取更新时间的时间戳
if ($modified !== $published) : ?>
<li class="post-update">بروزرسانی شده در <?php the_modified_time('d F Y'); ?></li>
<?php else : ?>
<li><?php the_date('d F Y'); ?></li>
<?php endif; ?>✅ 为什么用 'U'?
使用 'U' 参数强制返回 Unix 时间戳(秒级整数),完全规避时区、格式、空格等字符串比较陷阱,确保逻辑严谨可靠。
⚠️ 注意事项:
- 避免在条件中直接调用 the_modified_time() 或 the_date() —— 它们会立即输出内容,干扰逻辑判断;
- 若需多处复用,可封装为模板函数(如 my_get_post_date_display()),提升可维护性;
- 在循环(Loop)中使用 the_date() 时需注意:它会对同一天发布的多篇文章仅输出一次,建议统一用 get_the_date() + echo 替代。
总结:判断文章是否更新,核心不是“显示什么”,而是“比什么”。务必保证比较双方数据类型一致、精度对等。优先采用时间戳('U')比较,再按需格式化输出,即可彻底解决误判问题,让日期逻辑真正可靠。


















