Typecho HideContent 插件,隐藏文章中的特定内容,用户评论或者输入密码后才能看到
前言
因为花了亿点点时间,整理了My Little Airport所有的歌和歌词文章里面需要用到评论后可以看到下载链接的功能,在网上找了一圈也没找到功能满意的插件
于是上班摸鱼抽空写了一个小插件。PHP肯定是不会的,以前也没接触过Typecho的相关技术,好在AI足够强大,还是比较顺利的写出来了,开源在了typecho_plugin_HideContent
顺便学习了一点PHP(虽然这个语言工作中完全用不到),再学了一下js的build
功能
基本功能
两种隐藏方式:通过在文章中插入HTML的
<details>块,实现评论后可见、密码可见,可混用多块。<details hide-content="comment"> 这里填写内容 </details> <details hide-content="password" data-key="123"> 这里填写内容 </details>- 编辑器增强:工具栏按钮一键插入模板,选中文本可直接包裹成隐藏块。

- 样式灵活:自带简洁 UI,也支持后台自定义样式覆盖。
- 错误提示可配:评论未满足、密码错误的文案/HTML 都能自定义。

用户体验
- 评论成功和输入密码成功自动尝试解锁,不需要刷新网页。
- 密码成功本会话缓存,刷新不必重复输入。
- 权限直通:管理员/作者自动可见,写作/审核不受影响。
- 基础防护:同源校验、简易频率限制、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 限流,降低暴力尝试和跨站滥用风险。
演示
密码在评论可见内容中
大善人
哈哈哈
好人一生平安
123
good
谢谢
谢谢谢谢Thanks♪(・ω・)ノ
好人!
谢谢
xiexie
嗷嗷
啊
啊啊啊啊啊
谢谢!
嘻嘻
谢谢
谢谢🙏
好人一生平安!
好人一生一窝
谢谢你!
谢谢
多谢