CFCF Static Export ProDEMO

静态站上的评论:提交、审核与回写

为什么静态站也能有评论

单页是静态 HTML,但评论区不必是静态的。

渲染单页时,模板里会留一段标记:

<!--CFSE-COMMENTS-START id=123-->...<!--CFSE-COMMENTS-END-->

Worker 在返回 HTML 之前,按这个 id 查一次 D1 的 comments 表,把标记区间替换成最新评论。所以:

  • 页面主体仍然来自 R2,快;
  • 评论是请求时注入的,新评论、审核结果立即生效;
  • 不需要为了几条评论重建整页。

三条数据流

1. 读者在静态站提交

主题自带的评论表单会被改写成 action="/comments",提交时走 fetch:

  • 蜜罐字段:机器人填了就静默丢弃;
  • 最小停留时间:少于 3 秒直接拒绝;
  • 内容校验:少于 2 个字、链接超过 2 个会被拒;
  • IP 限流:isolate 级滑窗。

写入 D1 时标记 origin='worker'、wp_comment_id=0、状态按站点设置(off / pending / auto)。

2. 在 Worker 后台审核

后台 → 评论,可以按"未回拉 / 待审核 / 全部"筛选。

对未回拉的评论可以直接通过或删除;已经由 WordPress 接管的评论是只读的。

3. 回写到 WordPress

如果站点同时跑 WordPress,可以开启定时回拉(默认每小时):

  • 拉取 unpulled 的评论;
  • 在 WP 里创建评论(保留父子层级);
  • 回写 D1 的 wp_comment_id 和 origin='wp';
  • 下次不会再被拉一次。

WordPress 后台的评论也会通过钩子同步回 D1,保持两边一致。

开关

站点设置里的 comments 有三个字段:

字段 值 含义
mode off / embed / native 关闭 / 注入自定义片段 / 用内置评论系统
accept off / pending / auto 是否接受站外提交,以及是否需要审核
embed HTML mode=embed 时注入的第三方评论代码

已知限制

  • 没有验证码,强反垃圾需要接第三方;
  • 评论不分页,一次最多渲染 500 条;
  • 没有邮件通知(Worker 里发信需要额外服务)。

对个人站来说,蜜罐 + 停留时间 + 限流已经能挡掉绝大多数垃圾评论。

发表评论

邮箱不会被公开。带 * 的为必填项。