WordPress核心、主题和插件如何升级与回退
本文适用于 Linux 上自行部署的 WordPress 单站点,使用 WP-CLI 执行更新。按照WordPress 部署教程设置的站点,由部署账户维护代码,PHP 用户只写入媒体目录。因此后台提示没有写权限时,应回到部署流程,不必把整个网站改成可写。
把当前版本和更新目标记下来
使用实际拥有网站代码的部署账户执行下面的命令,不使用 root强行运行 WordPress。WP_ROOT要换成包含 wp-config.php的真实站点目录;网站不在示例目录时,不要创建一个同名空目录来凑路径。
WP_ROOT=/var/www/baole-site
php -v
wp --info
wp --path="$WP_ROOT" core version
wp --path="$WP_ROOT" plugin list --fields=name,status,version,update
wp --path="$WP_ROOT" theme list --fields=name,status,version,update
wp --path="$WP_ROOT" core check-update
确认命令行 PHP 与网站实际使用的 PHP 都满足本次版本要求,并保留插件、主题清单。命令提示 wp: command not found时,先在站点目录之外安装原厂 WP-CLI。下面只安装命令工具,不执行网站更新:
mkdir -m 700 ~/baole-wpcli-setup
cd ~/baole-wpcli-setup
curl --fail --location --output wp-cli.phar https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
php wp-cli.phar --info
sudo install -o root -g root -m 0755 wp-cli.phar /usr/local/bin/wp
wp --info
每条命令成功后再继续。已有 WP-CLI 时不覆盖安装;PHP 扩展或版本不匹配,应先处理环境。付费插件、定制主题、子主题和直接修改过的代码,要记录各自更新渠道;不能假定更新会保留直接改在父主题中的文件。
先有可恢复副本,再进入维护窗口
把网站文件、配置、媒体和数据库分别备份到网站根目录之外。MariaDB 使用MariaDB 备份与隔离恢复;MySQL 可参考MySQL 备份教程。按隔离恢复演练恢复一个副本,在副本上验证这次目标版本及插件组合。
正式更新时暂停站点写入和后台任务。WordPress 自带维护提示不能替代停写,也不会自动停掉系统计划任务。使用 Nginx 管理的独立站点,可以在该域名的对外 server段临时加入下面一行,再通过 nginx -t和重载生效:
return 503;
先保存该站点原配置;仅修改这一个站点,不放到全局配置。外部访问应收到 503,再停止这套站点的计划任务、队列及其他写入来源,做最后一次备份。记录暂停前状态。订单或会员业务还需安排回调与增量数据的处理,不能只暂停首页。
一次更新一个明确对象
以下在部署账户的 SSH 会话执行。按提示输入已经在副本验证过的版本或组件名称,每组分别运行;没有计划更新的组件跳过。插件、主题的名称取自前面的 name列。
read -r -p 'WordPress目标版本:' BL_WP_VERSION
test -n "$BL_WP_VERSION" &&
wp --path="$WP_ROOT" core update --version="$BL_WP_VERSION" &&
wp --path="$WP_ROOT" core update-db &&
wp --path="$WP_ROOT" core version &&
wp --path="$WP_ROOT" core verify-checksums
read -r -p '要更新的插件名称:' BL_WP_PLUGIN
read -r -p '插件目标版本:' BL_WP_PLUGIN_VERSION
test -n "$BL_WP_PLUGIN" && test -n "$BL_WP_PLUGIN_VERSION" &&
wp --path="$WP_ROOT" plugin update "$BL_WP_PLUGIN" --version="$BL_WP_PLUGIN_VERSION"
read -r -p '要更新的主题名称:' BL_WP_THEME
read -r -p '主题目标版本:' BL_WP_THEME_VERSION
test -n "$BL_WP_THEME" && test -n "$BL_WP_THEME_VERSION" &&
wp --path="$WP_ROOT" theme update "$BL_WP_THEME" --version="$BL_WP_THEME_VERSION"
出现错误立即停在该步骤,保留输出;不要继续跑后面的更新。核心校验只检查相应核心文件,不会证明插件兼容或业务正常。组件有自己的数据库迁移或授权步骤时,按该组件的版本要求处理。
恢复访问前后分别检查什么
先核对版本、错误日志和 PHP 运行状态,再移除本次临时加入的 503 规则;配置检查通过后重载 Nginx。随后用实际域名检查首页、文章与固定链接、管理员登录、图片上传,以及站点真正使用的表单或交易流程。恢复原有计划任务前,确认不会重复执行积压任务。
检查升级前后的文件归属:新文件继续由部署账户维护,PHP 用户按原方案读取代码并写入上传目录。若后台仍出现文件权限提示,应核对具体目录与动作;不通过递归改成 777解决。
升级失败时怎样退回去
- 只改了代码、没有数据库结构或数据变更:保留错误日志,在隔离副本验证原代码包可以恢复后,替换回对应组件的完整旧版本;清理相关缓存并复测。
- 数据库也发生了变化:原代码不一定能读取新数据。使用同一备份时点的代码、数据库和媒体完成隔离恢复,通过后再切回。
- 更新后已产生新文章、订单、注册或上传:先重新停写并保存新数据;确定合并或补录方案后再恢复旧备份,不能直接把新增内容覆盖掉。
如果页面一直停留在维护提示,先确认已经没有更新进程,再检查站点根目录的 .maintenance文件及 Web 服务器的临时维护规则。不要在更新仍运行时删除锁或维护文件。完成后记录版本、更新时间、检查结果与备份位置,方便下次维护。