撰于 阅读 735

写了个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. zys

    谢谢☺️

    回复
  2. chu

    谢谢谢谢!

    回复
  3. zys

    谢谢☺️

    回复
  4. 1

    谢谢

    回复
  5. 111

    谢谢

    回复
  6. didi

    谢谢🙏

    回复
  7. cici

    好耶

    回复