Skip to content

Latest commit

 

History

History
260 lines (192 loc) · 7.46 KB

File metadata and controls

260 lines (192 loc) · 7.46 KB

Typecho 保持修改时间插件

在编辑文章时可选择不更新"最后修改时间",适用于修改错别字、调整格式等小改动。

✨ 功能特性

  • 智能默认 - 编辑已发布文章时默认勾选,新文章时不勾选
  • 📝 支持文章和页面 - 同时支持文章(Post)和独立页面(Page)
  • 🎯 精确保持 - 保持原始的修改时间,完全不改变
  • 🔧 调试模式 - 可选开启调试日志,方便排查问题
  • 💡 适用场景 - 修改错别字、调整格式、修正链接等

📦 安装方法

  1. 下载插件文件
  2. 将文件夹重命名为 KeepModifiedTime
  3. 上传到 Typecho 的 usr/plugins/ 目录
  4. 在后台「控制台」→「插件」中启用插件

📝 使用方法

自动模式(推荐)

编辑已发布的文章:

  1. 进入文章编辑页面(或独立页面编辑页面)
  2. 复选框 默认已勾选
  3. 直接保存 → 修改时间保持不变

新建文章:

  1. 撰写新文章
  2. 复选框 不会勾选
  3. 发布 → 创建时间和修改时间一致

手动模式

需要更新修改时间时:

  1. 编辑文章
  2. 取消勾选 "不更新修改时间"
  3. 保存 → 修改时间更新为当前时间

结果说明

  • ✅ 文章内容已更新
  • ✅ 修改时间根据复选框状态决定
  • 🎯 大多数情况下无需手动操作

🎯 使用场景

场景 1:修改错别字

原文:这是一篇文章,有个错字别。
修改:这是一篇文章,有个错别字。

操作:勾选"不更新修改时间" → 保存
结果:错别字修正,但修改时间不变

场景 2:调整格式

原文:这是一段文字没有换行很长
修改:这是一段文字
      添加了换行

操作:勾选"不更新修改时间" → 保存
结果:格式优化,但修改时间不变

场景 3:修正链接

原文:访问 http://example.com
修改:访问 https://example.com

操作:勾选"不更新修改时间" → 保存
结果:链接修正,但修改时间不变

场景 4:补充标签/分类

添加或调整文章的标签、分类时,不想改变修改时间。

⚙️ 工作原理

正常编辑(不勾选)

保存文章时:
1. Typecho 自动更新 modified 字段为当前时间
2. 修改时间变更为最新时间

保持时间(勾选)

保存文章时:
1. 插件读取原始的 modified 时间
2. 强制使用原始时间覆盖
3. 修改时间保持不变

技术实现

// 获取原始修改时间
$original = $db->fetchRow(
    $db->select('modified')
        ->from('table.contents')
        ->where('cid = ?', $cid)
);

// 强制使用原始时间
$contents['modified'] = $original['modified'];

📋 界面预览

编辑已发布文章时

┌─────────────────────────────────┐
│  ☑ 不更新修改时间(默认勾选)   │
└─────────────────────────────────┘

新建文章时

┌─────────────────────────────────┐
│  □ 不更新修改时间(默认不勾选) │
└─────────────────────────────────┘

勾选后保存,修改时间将保持不变。

❓ 常见问题

1. 什么时候应该勾选"不更新修改时间"?

应该勾选

  • ✅ 修改错别字、标点符号
  • ✅ 调整排版格式
  • ✅ 修正链接地址
  • ✅ 补充标签、分类
  • ✅ 轻微的文字优化

不应勾选(应更新时间):

  • ❌ 添加新的内容段落
  • ❌ 修改文章核心观点
  • ❌ 更新过时的信息
  • ❌ 补充重要的新信息

2. 如果忘记勾选了怎么办?

可以再次编辑文章,勾选"不更新修改时间"后再次保存,时间会恢复到原来的状态(前提是你记得原来的时间)。

或者直接在数据库中修改 modified 字段。

3. 新文章会受影响吗?

不会。新建文章时,复选框默认不勾选,插件不会影响新文章的时间设置。即使手动勾选,因为没有"原始修改时间"可恢复,插件也不会执行任何操作。

4. 会影响 SEO 吗?

不会。保持修改时间不变有时反而对 SEO 有好处:

  • 搜索引擎不会因为小改动而重新索引
  • 避免文章在搜索结果中频繁跳动
  • 保持文章的发布时间稳定性

5. 支持批量操作吗?

不支持。但对于已发布文章,复选框默认勾选,大部分情况下无需手动操作。

6. 调试模式有什么用?

当插件行为异常时,可以在插件设置中开启调试模式,会生成 debug.log 文件,记录详细的执行流程,方便排查问题。

🔧 技术说明

插件钩子

  • admin/write-post.php::option - 在文章编辑页面添加复选框
  • admin/write-page.php::option - 在页面编辑页面添加复选框
  • Widget_Contents_Post_Edit::finishPublish - 文章保存后恢复时间
  • Widget_Contents_Page_Edit::finishPublish - 页面保存后恢复时间

核心逻辑

// 1. 编辑页面加载时:保存原始时间到 Session
$_SESSION['keep_modified_' . $cid] = $originalModified;

// 2. 保存文章后:从 Session 取出原始时间
$originalTime = $_SESSION['keep_modified_' . $cid];

// 3. 直接更新数据库
UPDATE typecho_contents SET modified = ? WHERE cid = ?

Session 安全

// 避免重复启动 session
if (session_status() === PHP_SESSION_NONE) {
    session_start();
}

兼容性

  • ✅ Typecho 1.0+
  • ✅ 所有主题
  • ✅ 所有编辑器(Markdown、富文本等)

🎯 使用建议

最佳实践

  1. 明确区分改动类型

    • 内容更新 → 不勾选,更新时间
    • 格式调整 → 勾选,保持时间
  2. 记录修改历史

    • 重要修改:在文章末尾添加"更新记录"
    • 小改动:勾选保持时间,无需记录
  3. 配合版本控制

    • 使用 Git 等工具记录文章变更
    • 插件只负责控制 Typecho 的修改时间

搭配其他功能

可以配合 Typecho 的其他功能使用:

  • 文章置顶 - 置顶文章修改错别字时使用
  • 草稿保存 - 草稿修改不影响修改时间
  • 版本历史 - 某些编辑器插件提供版本历史

📊 效果对比

不使用插件

原始时间:2024-01-01 10:00:00
修改错别字后:2025-10-13 15:30:00  ← 时间被更新

使用插件(勾选)

原始时间:2024-01-01 10:00:00
修改错别字后:2024-01-01 10:00:00  ← 时间保持不变

🔗 相关资源

📝 更新日志

1.0.0 (2025-10-13)

  • 🎉 首次发布
  • ✅ 支持文章和页面编辑
  • ✅ 智能默认勾选(编辑已发布文章时)
  • ✅ 不影响新文章的时间设置
  • ✅ 调试模式可选开启
  • ✅ Session 安全管理
  • ✅ 使用 finishPublish 钩子确保可靠性

👨‍💻 作者

cxuxrxsxoxr

📄 许可证

本插件遵循 Typecho 相关许可协议。