站点图标 西部盒子博客

一条命令批量清理 WordPress 机器注册垃圾用户

很多 WordPress 站点开放了用户注册功能后,后台会慢慢积攒一批机器人注册的垃圾账号。它们通常使用批量邮箱域名注册,账号本身没有真实内容,却会占用数据库、影响后台列表,甚至可能被用来试探登录。

如果手动一个个删除,既费时又容易漏掉。下面这条命令的思路很简单:先按邮箱域名统计注册数量,找出注册量异常高的非常用域名,再自动批量删除这些域名下的所有账号。整个流程可以一条命令跑完,特别适合定期维护使用。

完整命令

[crayon-6a8231da9f364677850771/]

脚本拆解

第一步:找出可疑域名

wp db query 可以直接执行 SQL。这里用 SUBSTRING_INDEX(user_email, '@', -1) 从邮箱地址中截取出 @ 后面的域名,例如从 bot001@example.com 中取出 example.com

随后通过 NOT IN (...) 排除掉一批常见邮箱域名,避免误删正常用户。白名单里已经包含了 QQ、网易、Gmail、Outlook、iCloud、新浪等主流邮箱。

最后按域名分组,用 HAVING COUNT(ID) >= 5 筛选出注册数量达到 5 个及以上的域名。正常个人邮箱很难同一域名注册 5 个以上,这个条件可以有效圈出批量注册的机器域名。

--skip-column-names 的作用是让查询结果只输出域名本身,方便后续循环读取。

第二步:自动批量删除

BAD_DOMAINS 为空时,说明没有发现异常域名,直接提示“恭喜”,不做任何删除。

如果找到了异常域名,就进入 for domain in $BAD_DOMAINS 循环,逐个处理。对每个域名:

这样一次运行就能清掉多个异常域名下的全部机器账号。

使用前提

  1. 服务器上已经安装并配置好 WP-CLI。
  2. sudo -u www 中的 www 是网站运行用户,需要根据你的环境改成 www-data 或其他实际用户;如果当前执行用户已有权限,也可以去掉这部分。
  3. 命令默认处理 wp_users 表,适用于标准 WordPress 数据库前缀 wp_。如果你的前缀不同,需要同步修改表名。

使用建议

先备份数据库。 删除用户是不可逆操作,建议运行前先备份,或者在测试站上验证一遍。

按需调整阈值。 示例中设置的是 >= 5,如果你的站点规模较小,可以改成 >= 3;规模较大时也可以适当调高,减少误判。

按需扩充白名单。 如果你的用户群体还有公司邮箱、学校邮箱等特殊域名,建议把相关域名加进 NOT IN (...),防止误删真实注册用户。

定期执行。 可以把这个脚本放进定时任务,每隔一段时间自动巡检一次。执行时若输出“恭喜”,就说明当前没有新的机器注册堆积。

总结

这条命令把“查找异常域名”和“批量删除用户”串在一起,适合做 WordPress 用户表的日常清理。核心逻辑就是:统计域名注册量、排除白名单、设置阈值、自动删除。只要备份到位、白名单维护好,就能比较安全地让后台用户列表重新变得清爽。

附录:宝塔面板安装 WP-CLI

如果你使用的是宝塔面板,可以先按下面步骤安装 WP-CLI,再回到前文执行清理命令。

1. 打开宝塔终端

登录宝塔面板,在左侧菜单找到「终端」,打开服务器终端;也可以通过 SSH 连接服务器后操作。

2. 确认站点使用的 PHP 版本

宝塔的 PHP 通常放在 /www/server/php/ 目录下,先看有哪些版本:
[crayon-6a8231da9f370019033705/]
例如输出里有 80,就代表 PHP 8.0,对应的执行文件是 /www/server/php/80/bin/php。下面示例都以 80 为例,请按自己实际版本替换。

3. 下载 WP-CLI

[crayon-6a8231da9f375614643143/]

4. 用宝塔 PHP 验证下载文件

[crayon-6a8231da9f377042895769/]
能正常输出 WP-CLI 信息,说明下载成功。

5. 安装为全局命令

先把文件放到系统目录,再创建一个使用宝塔 PHP 执行的 wp 命令:
[crayon-6a8231da9f37a185055654/]

6. 验证安装

[crayon-6a8231da9f386406402850/]
看到版本和路径信息后,就可以回到文章前面的脚本,在 WordPress 网站目录下运行清理命令了。

退出移动版