直接查 wp_options 表中 option_name 为 active_plugins 的 option_value 字段,该字段以 php 序列化格式存储所有激活插件的主文件路径,是唯一可靠、无需额外插件或代码的查询方法。

直接查 wp_options 表里的 active_plugins 选项
WordPress 不把激活插件存成独立记录,而是把整个插件数组序列化后塞进 wp_options 表的一行里,option_name 固定为 active_plugins。这是唯一可靠、无需额外插件或代码的查法。
操作步骤很简单:
- 登录 phpMyAdmin,选中你的 WordPress 数据库
- 点击 SQL 标签页,粘贴执行:
SELECT option_value FROM wp_options WHERE option_name = 'active_plugins';
- 结果会返回一段类似
a:2:{i:0;s:19:"akismet/akismet.php";i:1;s:26:"wordfence/wordfence.php";}的字符串
这段是 PHP 序列化数据,不是明文列表。里面每个 s:N:"path/to/plugin.php" 就是一个激活插件的主文件路径——路径开头是插件目录名,斜杠后是主文件名(通常是 pluginname.php)。
为什么不能用插件表或 JOIN 查?
WordPress 没有专门的插件元数据表,wp_plugins 表根本不存在。所有插件状态都靠 active_plugins 这个单字段维护。有人试图 JOIN wp_options 和 wp_postmeta 或其他表,纯属白费力气——没这结构。
另外注意:
- 表前缀不一定是
wp_,得看你安装时设的,比如myblog_options,查之前先确认前缀 - 如果返回空结果或
NULL,说明网站可能处于“所有插件被禁用”状态(比如通过 FTP 重命名了plugins文件夹) - 某些多站点(Multisite)环境里,网络级激活的插件存在
sitemeta表中,键为active_sitewide_plugins,需另查
想看可读列表?别手解序列化,用小脚本转
手动解析 a:2:{...} 容易出错,尤其含中文或特殊字符时。最稳妥的方式是把值复制出来,用本地 PHP 快速反序列化:
$val = 'a:2:{i:0;s:19:"akismet/akismet.php";i:1;s:26:"wordfence/wordfence.php";}';
$plugins = unserialize($val);
foreach ($plugins as $p) echo basename(dirname($p)) . "\n";
输出就是 akismet、wordfence 这样的目录名,一目了然。别用在线反序列化工具处理生产环境数据——授权密钥可能藏在别的 option 里,顺带被拖走。
查到插件名后,下一步常踩的坑
光知道名字不够,很多人接着就去删数据库记录或改 option_value 手动开关插件——这极危险:
-
active_plugins是运行时快照,不是唯一真相;插件自身可能在register_activation_hook里写其他 option(比如配置、许可证),只改这一项会导致状态不一致 - PHP 版本 > 7.4 时,如果插件存的是带对象的序列化数据(含
O:8:"stdClass":...),直接unserialize()可能报错,而 WordPress 后台停用逻辑会兜底处理 - 修改前务必导出
wp_options表备份,否则一个错字就让全站白屏
真正要开关插件,优先走后台「插件 → 已安装插件」页面,或 FTP 重命名插件文件夹。数据库操作只用于诊断、恢复或批量排查,不是日常管理手段。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











