本文约 2,430 字,预计阅读 7 分钟。文中命令与配置均经过实测,可直接参考执行。
引言
WordPress 从 3.7 版本开始默认开启小版本自动更新,插件、主题也常被设置为自动升级,本意是及时修补安全漏洞,但对不少站长来说却可能带来麻烦:升级选在凌晨进行,第二天发现主题错位、插件冲突、页面白屏,甚至要回滚数据。尤其是那些主题改过源码、插件锁定过版本的站点,自动更新反而成了风险源。也有的站长只是单纯不想后台一天到晚弹出「有可用更新」的红色提示,看着心烦。这两件事其实是两个不同的开关,很多人混为一谈,结果改了半天没效果。下面分别讲清楚它们的区别和具体关法,让你能按需选择。
故障原因分析
- 核心自动更新默认开启。WordPress 会静默升级小版本(如 6.4 到 6.4.1),这是系统行为,很多人没意识到它一直在后台跑。
- 插件和主题的自动更新被单独开启。可以在插件列表里对单个插件打开自动更新,也可能被主题框架默认打开。
- 「关闭更新」和「关闭更新提示」是两码事。前者阻止升级,后者只是隐藏通知,很多人只做了后者却以为更新停了。
- 主机商可能强制自动更新。部分托管 WordPress 主机会在服务器层强制升级,配置文件里关不干净。
- 翻译文件也会自动更新。语言包更新同样会触发请求和提示,需要对症关闭。
- 多个插件都在管理更新设置,彼此冲突,导致关不彻底。
分步解决方案
方法一:用 wp-config.php 常量关闭核心自动更新。 编辑网站根目录的 wp-config.php,在 / That's all, stop editing! / 之前加入:
// 完全禁用自动更新器
define('AUTOMATIC_UPDATER_DISABLED', true);
// 明确禁止核心自动更新,false 表示全部禁止
define('WP_AUTO_UPDATE_CORE', false);
保存后生效。WP_AUTO_UPDATE_CORE 设为 false 表示核心一概不自动更新;设为 true 则允许所有级别更新;设为 'minor' 只允许安全小版本更新。多数想「锁版本」的站长应设成 false。
方法二:用 functions.php 过滤器精细控制。 想分别控制核心、插件、主题时,在主题 functions.php 里加入:
// 关闭各类自动更新
add_filter('auto_update_core', '__return_false');
add_filter('auto_update_plugin', '__return_false');
add_filter('auto_update_theme', '__return_false');
add_filter('auto_update_translation', '__return_false');
这些过滤器可以对单类项目生效,比如只想关闭主题自动更新而保留插件更新,就删掉对应的一行。建议放在子主题的 functions.php 里,避免主题更新后被覆盖丢失。
方法三:隐藏后台更新提示(隐藏通知,不等于关闭更新)。 如果只是不想看到提示,但仍希望手动掌握更新节奏,可以隐藏提醒:
// 移除核心更新提示
add_action('admin_menu', function () {
remove_action('admin_notices', 'update_nag', 3);
});
// 屏蔽插件和主题更新计数(谨慎使用)
add_filter('pre_site_transient_update_core', '__return_null');
add_filter('pre_site_transient_update_plugins', '__return_null');
add_filter('pre_site_transient_update_themes', '__return_null');
需要说明的是,后面的 transient 过滤器在屏蔽提示的同时也会阻断更新检查,等于「眼不见心不烦」,属于较强硬的做法;只想隐藏红点的话,保留第一段即可。
方法四:检查主机层面的强制更新。 部分托管型主机会忽略你配置文件里的设置强制升级。遇到这种情况,需要联系主机商确认,或改用可自主控制版本的主机方案。
验证:改完如何确认生效。 保存配置后,进入「仪表盘 → 更新」页面,若不再自动跳转升级、且几天后核心版本号没有自行变化,说明核心自动更新已经关闭。插件和主题可以到各自列表里查看,被锁定的项目不会再悄悄升级。观察一段时间仍有异动,就要回头检查是不是某个插件在管理更新设置,或者主机在服务器层动了手。
常见踩坑点
- 以为关掉了更新提示就等于关掉了自动更新,其实只是把通知藏起来了。
- 把
WP_AUTO_UPDATE_CORE的值写成了字符串'false',导致判断异常。 - 代码加在主题 functions.php 后,主题一更新就被冲掉,应写进子主题。
- 关闭核心更新后长期不手动升级,埋下安全漏洞隐患。
- 只关了核心,忘了插件和主题的自动更新,某个插件仍会自己升级。
- 多个插件都在管理更新设置,彼此冲突,最好统一用一处控制。
- 误用 transient 过滤器,导致安全更新也不提醒,站长得不到任何告警。
总结
关闭自动更新和隐藏更新提示是两套不同的操作:想真正阻止升级,用 wp-config.php 的 AUTOMATIC_UPDATER_DISABLED、WP_AUTO_UPDATE_CORE 常量,或在子主题 functions.php 里用 auto_update_* 过滤器;想清静一点只是不看红点,则用移除 update_nag 通知的方式。关闭 WordPress 自动更新能避免升级带来的意外,但也要提醒自己定期手动备份、择机升级,别让站点长期停在旧版本上,安全补丁该打还是要打。
