搜索全站
安全防护 8 分钟阅读

WordPress 自动更新机制详解:核心、插件、主题的更新逻辑与控制

WordPress 的自动更新分好几类:核心小版本、核心大版本、插件、主题、翻译,各自开关不同。本文讲清四种更新的触发条件、控制常量(WP_AUTO_UPDATE_CORE、AUTOMATIC_UPDATER_DISABLED)与钩子的用法,并给出生产环境的推荐配置与风险控制策略。

U
UFO_PF 2018-07-21 · 阅读 8 分钟
Wo 安全防护
阅读提示
本文约 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);

八、更新前必做的保护

  1. 每日自动备份(文件 + 数据库);
  2. 开启更新结果邮件通知;
  3. wp core check-update 定期检查(可写成 cron,邮件推送)。

常见踩坑与失败案例

  1. 以为关了自动更新,结果插件自己更新了 —— WP_AUTO_UPDATE_CORE 只管核心,插件自动更新要单独控制。
  2. 案例:某站开启了全部插件自动更新,某页面构建器插件发布新版后与主题不兼容,前台样式全崩且发生在凌晨无人值守。教训是:构建器、主题、支付类插件永不开自动更新,这类插件必须先在测试环境验证。
  3. DISALLOW_FILE_MODS 导致无法使用后台主题编辑器 —— 这是预期行为,也是安全收益。
  4. 自动更新卡住 —— .maintenance 文件残留或 wp-content/upgrade 目录权限不对。删除 .maintenance 后重试。
  5. 更新后邮件没收到 —— 站点发信配置有问题(SMTP 未配),更新失败也不会通知你。先验证 wp_mail() 可用。
  6. 多站点 —— 只有超级管理员能执行核心更新,插件自动更新在网络级控制。

总结

自动更新的正确策略是分层次:核心小版本自动(安全补丁不能等)、核心大版本人工(兼容性要审)、基础设施插件可选自动、构建器与主题永不自动。配套必须有每日备份和更新通知邮件——自动更新最大的风险不是”更新本身出错”,而是”出错时你不知道”。把 WP_AUTO_UPDATE_CORE = 'minor' 加上,再配好备份,就能兼得及时性与可控性。

U
UFO_PF作者

专注 WordPress 生态的实战作者,内容以「可复制、可验证」为第一原则。

留下你的想法

邮箱地址不会被公开。带 * 的为必填项。