撰于 阅读 737

写了个Typecho隐藏内容的小插件,评论可见或输入密码可见

Typecho HideContent 插件,隐藏文章中的特定内容,用户评论或者输入密码后才能看到

前言

因为花了亿点点时间,整理了My Little Airport所有的歌和歌词文章里面需要用到评论后可以看到下载链接的功能,在网上找了一圈也没找到功能满意的插件

于是上班摸鱼抽空写了一个小插件。PHP肯定是不会的,以前也没接触过Typecho的相关技术,好在AI足够强大,还是比较顺利的写出来了,开源在了typecho_plugin_HideContent

顺便学习了一点PHP(虽然这个语言工作中完全用不到),再学了一下js的build

功能

基本功能

  1. 两种隐藏方式:通过在文章中插入HTML的<details>块,实现评论后可见、密码可见,可混用多块。

    <details hide-content="comment">
    这里填写内容
    </details>
    <details hide-content="password" data-key="123">
    这里填写内容
    </details>
  2. 编辑器增强:工具栏按钮一键插入模板,选中文本可直接包裹成隐藏块。
    2025-10-29T13:49:44.png
  3. 样式灵活:自带简洁 UI,也支持后台自定义样式覆盖。
  4. 错误提示可配:评论未满足、密码错误的文案/HTML 都能自定义。
    2025-10-29T13:50:19.png

用户体验

  1. 评论成功和输入密码成功自动尝试解锁,不需要刷新网页。
  2. 密码成功本会话缓存,刷新不必重复输入。
  3. 权限直通:管理员/作者自动可见,写作/审核不受影响。
  4. 基础防护:同源校验、简易频率限制、HMAC 校验密文完整性。

技术栈

评论可见(hide-content="comment")

渲染阶段识别隐藏块,生成block_id;如果用户未评论,正文不会输出到页面,仅留下一个“锁定”占位。
前端点击“请评论后查看”或用户评论成功后,触发请求到 action/hide-content。
后端基于用户id或邮箱匹配审核通过的评论记录,通过则返回对应块的明文。

密码可见(hide-content="password" data-key="密码")

渲染阶段后端用文章 ID + block_id + 文章里写的 data-key 派生密钥,把正文加密成 data-encrypted,同时清空页面上的 data-key

用户在页面输入密码后,请求 action/hide-content;后端用相同的派生规则解密校验 MAC 成功后才把明文返回。
附带同源校验 + 简易 IP 限流,降低暴力尝试和跨站滥用风险。

演示

密码在评论可见内容中


已有 49 条评论

  1. mengyuwa

    謝謝老師

    回复
  2. kk

    谢谢老师

    回复
  3. 潘达

    哇新插件,没想到还有人做typecho插件。之前用过一个,不过蛮久不维护了,而且没有评论可见功能。

    回复
  4. yuyu

    谢谢老师

    回复
  5. yuyu

    谢谢老师

    回复
  6. 谢谢

    回复
  7. 好高级喔,芝士就是力量!

    回复
  8. 测试

    测试一下

    回复
  9. A

    Thanks

    回复
  10. 谢谢

    回复
  11. G

    好人一生平安!!

    回复
  12. 鞦韆

    谢谢!

    回复
  13. Y

    谢谢

    回复
  14. 啊Y

    大佬,一开启ContentManager这个插件后,隐藏功能就失效

    回复
  15. 谢谢

    回复
  16. 清河

    好人

    回复
  17. 林昀儒

    好人一生平安

    回复
  18. 博主

    5555感谢

    回复
  19. 宝库

    感恩您,好人一生平安

    回复
  20. hengheng

    大善人

    回复