直接修改 wp_options 表中 active_plugins 的值为 a:0:{} 可强制停用所有插件,但不执行停用钩子、不清除定时任务,且需注意序列化格式正确、备份数据、区分多站点环境。
直接改 wp_options 表能关插件,但不是“关闭”,是强制停用
wordpress 没有真正意义上的“全局关闭插件”机制,wp_options 表里的 active_plugins 选项存的是已启用插件的路径数组。修改它只是让 wordpress 启动时不加载那些插件——相当于把插件从激活列表里清空,不是卸载,也不影响插件文件本身。
常见错误现象:白屏(500 或空白页)、后台打不开、Fatal error: Cannot redeclare 类错误,往往就是某个插件在 plugins_loaded 阶段就崩了,连 admin 页面都进不去,这时候数据库直改是最快出路。
- 必须确保数据库访问权限(phpMyAdmin / Adminer / 命令行)
- 操作前务必备份
wp_options表,或导出整库 - 别碰
autoload字段为yes的其他行,改错可能让后台彻底无法加载
查 option_value 并清空 active_plugins
进 phpMyAdmin,选中站点数据库,打开 wp_options 表(前缀可能是 wp_、myblog_ 等,以你实际为准),搜索 option_name = 'active_plugins' 这一行。
它的 option_value 是序列化字符串,类似:
a:2:{i:0;s:19:"akismet/akismet.php";i:1;s:27:"woocommerce/woocommerce.php";} 直接把它改成 a:0:{} 即可。这是 PHP 序列化的空数组标准写法,WordPress 能正确识别。
- 千万别填空字符串
''或null,WordPress 会报unserialize(): Error at offset - 别用 JSON 格式(如
[]),WordPress 不认 - 如果表前缀不是
wp_,请确认真实前缀,比如wp234_options,否则搜不到
改完立刻生效,但部分插件残留钩子仍可能触发
这个操作跳过了 WordPress 的插件停用流程(即不执行插件自带的 deactivate_{plugin_slug} 钩子),所以:
- 插件自己注册的定时任务(
wp_schedule_event)不会自动清除,得手动删wp_options里cron项或用 WP-CLI 清理 - 有些插件在
init之后才挂钩子,但只要没被加载,就不会运行;可放心重启网站 - 如果白屏依旧,说明问题不在插件激活态,可能是主题
functions.php或核心文件损坏,别只盯着active_plugins
恢复插件时,别靠“记路径”手动填回去
想重新启用插件,不要尝试把旧的序列化字符串复制回来——路径稍有出入(比如大小写、斜杠方向、多一个空格)就会导致 unserialize 失败,网站再次白屏。
正确做法是:先用 FTP 或主机后台,把 wp-content/plugins/ 下不需要的插件文件夹临时重命名(比如加 _off 后缀),只留真正要开的;然后进后台「插件 → 已安装插件」页面,手动勾选启用。WordPress 会自动生成合法的序列化值。
- 如果后台完全打不开,可用 WP-CLI:
wp plugin activate akismet - 切勿在数据库里手写带中文路径或含特殊字符的插件名,PHP 序列化对编码极其敏感
- 多站点(Multisite)环境要改
sitemeta表里的active_sitewide_plugins,不是wp_options
最麻烦的其实是判断哪个插件真惹的祸——白屏时看不到错误,建议在 wp-config.php 里临时加上 define('WP_DEBUG', true); define('WP_DEBUG_LOG', true);,错误会写进 wp-content/debug.log,比瞎猜快得多。











