WordPress 6.3 支持在手动更新插件和主题失败后回滚旧版本

如果手动更新插件或主题过程失败,回滚功能将自动恢复以前安装的版本,以确保网站仍然可供用户使用。

回滚功能起源于#51857。

更新插件或主题时,旧版本的插件或主题将移动到wp-content/upgrade-temp-backup/plugins/PLUGINNAMEwp-content/upgrade-temp-backup/themes/THEMENAME文件夹。

我们选择移动而不是 zip 压缩的原因是因为压缩/解压缩是资源密集型过程,并且可能会增加低端共享主机上的失败风险。另一方面,移动文件是立即执行的,不会成为瓶颈。

移动是通过 WordPress 6.2 中包含的新move_dir()功能来完成的。PHP的 rename()是用于此目的,并回退到copy_dir(),WordPress 内核长期以来使用此方法来递归文件副本。move_dir()::move() 使用 WP_Filesystem_Direct、  WP_Filesystem_FTPext、  WP_Filesystem_ftpsockets和 WP_Filesystem_SSH2文件系统抽象的方法  ,并有一个回退到 copy_dir() .  在开发笔记中了解 move_dir()更多信息。

如果更新过程失败,那么我们在“upgrade-temp-backup”文件夹中移动的备份将恢复到其原始位置。如果更新成功,则删除备份。

站点运行状况屏幕中添加了两项新检查:

  • 检查并确保备份文件夹可写。
  • 检查是否有足够的可用磁盘空间来安全地执行更新。

为避免混淆:成功更新后,“upgrade-temp-backup”文件夹将不会用于将插件“回滚”到以前的版本。您可以为此使用各种回滚插件

“upgrade-temp-backup”文件夹将仅包含先前安装的正在更新的插件或主题的临时备份,更新过程完成后,该文件夹将被清空。

当发生回滚时,用户应该只是看到有一个更新待处理,并且他们的站点应该仍然可以工作。

对于导致手动更新失败和回滚的最简单解释是从 WP_Upgrader::install_package()返回的任何 WP_Error 内容。

  1. 错误的请求,缺少更新的源或目标。
  2. 一个 WP_Error 从 upgrader_pre_install,  upgrader_source_selection,  upgrader_clear_destinationupgrader_post_install 过滤器返回。
  3. 一个空的下载包。
  4. 将已安装的插件/主题移动到临时备份目录时失败。
  5. 如果无法清除远程源目标文件夹并且存在某些内容。
  6. 无法创建远程目标文件夹。
  7. 无法将更新移动/复制到远程目标。

以上包含回滚功能的第 1 部分和第 2 部分。第 3 部分(希望适用于 WordPress 6.4)是相同的过程,但用于自动更新。具体来说,回滚第 3 部分会检查更新的插件在激活时是否不会导致 PHP 致命错误。如果是这样,则会捕获此错误并恢复以前安装的版本。

所有回滚功能(第 1-3 部分)都包含在回滚更新失败 功能插件中用于测试。


【AD】BandwagonHost:$92.30/年/2核/2G内存/40G SSD/1T流量/1Gbps/香港CMI/大阪软银/洛杉矶CN2 GIA

【AD】美国洛杉矶CN2 VPS/香港CN2 VPS/日本CN2 VPS推荐,延迟低、稳定性高、免费备份_搬瓦工vps