本文约 3,012 字,预计阅读 8 分钟。文中命令与配置均经过实测,可直接参考执行。
引言:自动更新是保护还是风险
支持自动更新的人说:补丁不及时是最大风险,自动更新能第一时间堵漏洞。反对的人说:我见过插件自动更新把站点搞崩。
两边都有道理。实际上 WordPress 的自动更新是分层的,默认行为也没那么激进——搞清楚分层之后,你可以做到”安全补丁自动装,大版本人工审”。
原理分析:四类自动更新
| 类型 | 默认行为 | 说明 |
|---|---|---|
| 核心小版本(如 6.7.1 → 6.7.2) | 默认开启 | 安全与维护补丁,风险低 |
| 核心大版本(如 6.7 → 6.8) | 默认关闭 | 可能引入不兼容 |
| 插件自动更新 | 默认关闭 | 需逐个开启 |
| 主题自动更新 | 默认关闭 | 需逐个开启 |
| 翻译文件更新 | 默认开启 | 影响很小 |
另外还有一条:如果你的站点用的是开发版(beta)或开启了 WP_AUTO_UPDATE_CORE 相关配置,行为会变化。
保姆级实操
一、控制核心更新:WP_AUTO_UPDATE_CORE
// 全部关闭(含小版本)
define('WP_AUTO_UPDATE_CORE', false);
// 全部开启(含大版本,不推荐)
define('WP_AUTO_UPDATE_CORE', true);
// 只开小版本(推荐)
define('WP_AUTO_UPDATE_CORE', 'minor');
只开小版本是绝大多数生产站点的合理选择。
二、总开关:AUTOMATIC_UPDATER_DISABLED
define('AUTOMATIC_UPDATER_DISABLED', true);
这个常量会禁用所有自动更新(包括安全补丁)。除非你有严格的变更管理流程,否则不建议开启。
三、用钩子精细控制
在主题的 functions.php 或 mu-plugins 里:
// 关闭核心大版本自动更新
add_filter('allow_major_auto_core_updates', '__return_false');
// 关闭核心小版本
add_filter('allow_minor_auto_core_updates', '__return_false');
// 关闭开发版更新
add_filter('allow_dev_auto_core_updates', '__return_false');
// 开启所有插件自动更新
add_filter('auto_update_plugin', '__return_true');
// 只自动更新指定插件
add_filter('auto_update_plugin', function ($update, $item) {
$trusted = ['wordfence', 'contact-form-7'];
return in_array($item->slug, $trusted, true) ? true : $update;
}, 10, 2);
// 开启主题自动更新
add_filter('auto_update_theme', '__return_true');
// 更新失败时发邮件通知
add_filter('auto_core_update_send_email', '__return_true');
四、后台逐个开启插件自动更新
插件 → 已安装插件 → 找到插件 → “启用自动更新”。批量操作:勾选多个 → 批量操作 → 启用自动更新。
WP-CLI 方式:
wp plugin list --field=name --status=active --update=available
wp plugin install --force wordpress-seo # 手工更新单个
五、完全禁用后台更新(受管环境)
define('DISALLOW_FILE_MODS', true);
开启后:后台无法安装/更新/删除插件主题,也无法编辑主题文件。适合用 Composer 部署的站点。注意它会同时禁用主题文件编辑器,这正是我们想要的安全效果。
六、更新通知邮件的控制
// 关闭更新结果邮件
add_filter('auto_core_update_send_email', '__return_false');
// 关闭"有更新可用"的提醒邮件
add_filter('send_core_update_notification_email', '__return_false');
七、生产环境推荐配置
// wp-config.php
define('WP_AUTO_UPDATE_CORE', 'minor'); // 只自动打小补丁
define('WP_POST_REVISIONS', 5);
// 不设 AUTOMATIC_UPDATER_DISABLED
// mu-plugins/update-policy.php
add_filter('allow_major_auto_core_updates', '__return_false');
add_filter('auto_update_plugin', function ($update, $item) {
// 只自动更新安全类插件
$trusted = ['wordfence', 'really-simple-ssl'];
return in_array($item->slug, $trusted, true) ? true : $update;
}, 10, 2);
八、更新前必做的保护
- 每日自动备份(文件 + 数据库);
- 开启更新结果邮件通知;
wp core check-update定期检查(可写成 cron,邮件推送)。
常见踩坑与失败案例
- 以为关了自动更新,结果插件自己更新了 ——
WP_AUTO_UPDATE_CORE只管核心,插件自动更新要单独控制。 - 案例:某站开启了全部插件自动更新,某页面构建器插件发布新版后与主题不兼容,前台样式全崩且发生在凌晨无人值守。教训是:构建器、主题、支付类插件永不开自动更新,这类插件必须先在测试环境验证。
DISALLOW_FILE_MODS导致无法使用后台主题编辑器 —— 这是预期行为,也是安全收益。- 自动更新卡住 ——
.maintenance文件残留或wp-content/upgrade目录权限不对。删除.maintenance后重试。 - 更新后邮件没收到 —— 站点发信配置有问题(SMTP 未配),更新失败也不会通知你。先验证
wp_mail()可用。 - 多站点 —— 只有超级管理员能执行核心更新,插件自动更新在网络级控制。
总结
自动更新的正确策略是分层次:核心小版本自动(安全补丁不能等)、核心大版本人工(兼容性要审)、基础设施插件可选自动、构建器与主题永不自动。配套必须有每日备份和更新通知邮件——自动更新最大的风险不是”更新本身出错”,而是”出错时你不知道”。把 WP_AUTO_UPDATE_CORE = 'minor' 加上,再配好备份,就能兼得及时性与可控性。
