WP Manifestindependent plugin directory
manifest / security / wp-comment-guard

WP 评论外链守卫

给 WordPress 评论外链做分级与体检:久未往来的访客链接降为纯文本,域名被抢注成博彩/色情/诈骗站的自动拦下,抓不到的一律不降级。只改显示,不动数据库。

★ 1stars

Install

Download source zip No release zip yet

This is the repository archive. It installs, but the folder name will carry the branch suffix and updates will not flow.

Install straight from GitHub with WP-CLI:

wp plugin install https://github.com/laozhangge/wp-comment-guard/archive/refs/heads/main.zip
Updates itself. It ships its own updater, so new versions appear under Dashboard → Updates.

给 WordPress 评论外链做分级与体检:久未往来的访客链接降为纯文本,域名被抢注成博彩/色情/诈骗站的自动拦下,抓不到的一律不降级。

只改显示,不改数据库。所有降级都是渲染时把 <a> 换成 <span>,评论本身、数据库字段一个字不动。

作者:老张 | 下载:Releases | 更新日志:CHANGELOG.md


它解决什么问题

博客跑得久了,评论区会攒下几千个外链。麻烦在于这些链接会变:

  1. 老博友的域名被抢注 —— 十几年前一起写博客的人早就不写了,域名到期被买走,现在指向博彩站,链接还挂在你的文章下面。
  2. 人还在,旧域名没了 —— 他换了域名、还在留言,但旧域名已经过期,随时可能被人注册。
  3. 域名变成交易所/资源站 —— 站还是那个站,内容已经不是个人博客了,甚至用 WordPress 搭的(所以光看"有没有 CMS 指纹"判断不出来)。

手工一条条点开看,两万条评论要点一年。这个插件做三件事:看人还来不来 → 查域名现在是什么 → 只降级该降的。


安装

  1. 后台上传 wp-comment-guard-x.y.z.zip,启用
  2. 左侧菜单出现「外链守卫」→ 进「设置」按需调整(默认值基本可用)
  3. 进「外链体检」,点「连续扫描到完成」开始第一次体检

要求:WordPress 5.5+、PHP 7.4+、服务器能访问外网(要用 curl 抓域名首页)。


第一次使用:先扫描,别急着看结果

插件装上时体检表是空的,所有链接都按默认规则(只看往来时间)放行。要它开始判断"域名现在是什么",得先扫一遍。

扫描要多久? 取决于你有多少域名。实测约 2~4 秒/个(服务器并发抓取,一次 15 个):

考核池域名数 大致耗时
100 个 5 分钟
500 个 25 分钟
2000 个 2 小时

几点说明:

  • 只扫「1 年没来往 ~ 5 年没来往」之间的域名。近一年还在留言的(人还在,站不太可能转手)不扫,超过 5 年没来往的也不扫(前台早按归档降级了,扫了白烧 CPU)。
  • 点了「连续扫描」后页面会自己刷新推进,可以切到别的标签页,不会中断。白屏就刷新本页,进度在数据库里。
  • 扫完之后,每小时还会自动复查一批到期的(7 天一轮),不用你管。
  • 想快一点:把「每批扫描数量」调到 30~60(设置页),或者开本机抓取助手(见下)。

它怎么判断

判定按固定顺序走,前面命中就停,不再往下看:

顺序 检查 结果
1 站长手动加的白名单 放行
2 已知风险(博彩/色情/诈骗/域名待售)+ 黑名单 降级
3 死链(DNS 解析不了 / 404 / 410) 降级
4 域名已成停靠页 / 待售页 降级
5 近 1 年还有往来 放行(也不进体检)
6 超过 5 年没往来 归档降级
7 夹在中间的 · 已不是个人站 降级
8 其余 放行

「已不是个人站」的判定依据:标题是商业站点句式、标题自称公司/工作室/机构、标题里没有博客特征且不像人话。

两条铁律:

  • 抓不到 ≠ 有问题。DNS 死了、403、超时、页面空白,一律不降级。看不清就不给结论。
  • 实锤结论不会被网络波动洗白。一个域名一旦被判为风险,之后哪怕某次抓不到,结论仍然保留。

常见问题

问:改了设置 / 扫完了,前台还是没变化?

页面缓存。插件会自动清 WP Rocket、LiteSpeed Cache、W3 Total Cache、WP Super Cache、WP Fastest Cache 的缓存;如果你用的是别的缓存插件或 CDN,手动清一次。

问:为什么有些站的链接变成纯文本了,我点开看明明是正常的?

点开看的是"现在",判定用的是"我们数据库里的结论"。可能是:① 很久没体检了,结论过期;② 被页面标题误判。用后台的「域名速查」,粘域名进去就能看到它每一步被判成什么、为什么。觉得判错了,就点「加入白名单」。

问:某个域名一直显示"抓不到"?

可能是 IP 被对方防火墙拦、或者站点只对国内网络开放。用本机抓取助手:在你自己的电脑上跑一个小脚本,用它去抓、结果回传给插件。后台「外链体检 → 本机抓取助手」里有下载链接和一键脚本。

问:会不会误伤正常访客?

近一年来留过言的访客链接一律放行,不做任何体检判定。真正会被降级的只有两类:确实变成黄赌/诈骗/待售页的,和五年以上毫无来往的。

问:能只降级链接、保留评论吗?

本来就是这样。插件从不改数据库里的评论内容,只在前台渲染时替换标签。

问:支持多站点 / 子目录 / 中文域名吗?

支持。中文域名(Punycode 编码前)也能正常识别。


隐私与数据

  • 所有检测结果只存在你自己的数据库里,不向任何第三方上报
  • 运行时唯一的外部请求是抓取待检域名的首页(这是体检本身)
  • 不收集访客 IP、不读取访客隐私信息
  • 本机抓取助手用一次性令牌(32 位随机)通信,可随时在后台重置

卸载

停用:保留全部数据,前台退回"不做任何处理"(链接全部可点)。

删除插件:会清空体检表、黑名单/白名单、设置和定时任务。这一步不可逆 —— 两万个域名的体检结果重扫要好几个小时。只是想关掉的话,停用就够了。


更新

插件自带更新检查:设置页顶部有「检查更新」,插件列表的插件名下面也有。有新版本时按 WordPress 常规流程更新即可。

本插件没有提交到 WordPress 官方插件目录,更新提示来自作者自己的更新源;GitHub 仓库里的代码与发布包是同步的,也可以直接下载 Releases 里的 zip 手动覆盖升级(WordPress 会整目录替换,不会残留旧文件)。


更新日志

见 CHANGELOG.md。

许可证

GPL v2 or later。