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

文 / @WordPress主题

如果手动更新插件或主题的尝试遭遇波折,不必担忧,因为回滚功能已为您悄然准备好,它会自动恢复之前的版本,以确保您的网站对用户可用如初。

在更新插件或主题时,老版本会被巧妙地移动到wp-content/upgrade-temp-backup/plugins/PLUGINNAME或wp-content/upgrade-temp-backup/themes/THEMENAME文件夹。或许您好奇,为什么我们选择移动而不是zip压缩呢?原因嘛,因为压缩和解压缩是一项相当费力的工作,也可能在低端共享主机上增加失败的可能性。与之形成鲜明对比的是,移动文件的执行速度嗖嗖的,不会成为瓶颈。

咱们要感谢WordPress 6.2中新增的move_dir()功能,这个家伙在搬运时利用了PHP的rename()函数,如果有需要,还能回退到copy_dir(),这个方法可是WordPress内核的老朋友,一直以来都在递归地为文件打下复印件。要想更深入地了解move_dir(),可以翻翻开发笔记。

如果升级进程失败,那我们在“upgrade-temp-backup”文件夹里备份的文件将被还原到它们原本的位置。如果升级成功,那就删掉备份,别留任何痕迹。

为了防止混淆,要牢记:一旦成功升级,就不会再用“upgrade-temp-backup”文件夹来回滚插件到之前的版本。要做这事,您可以考虑各种各样的回滚插件。

“upgrade-temp-backup”文件夹只会包含正在更新的插件或主题的临时备份,一旦更新完毕,这个文件夹就会被清空一新。

如果需要回滚,用户应该只会看到一个待处理的更新,站点依然可以照常运行。

最简单的解释,导致手动更新失败并需要回滚,通常会出自WP_Upgrader::install_package()返回的WP_Error内容。

出错的请求,源或目标的更新源不完整。 从upgrader_pre_install, upgrader_source_selection, upgrader_clear_destination, upgrader_post_install过滤器返回的WP_Error。 一个下载包里啥都没有。 在移动已安装的插件/主题到临时备份文件夹时出问题。 无法清理掉远程源目标文件夹里的某些内容。 远程目标文件夹无法被创建。 无法将更新移动/复制到远程目标文件夹。 以上内容包含了回滚功能的第一部分和第二部分。第三部分(期望适用于WordPress 6.4)是同样的过程,只不过用于自动更新。具体而言,第三部分的回滚将检查升级后插件的激活是否会导致PHP致命错误。如果有这种情况,它将捕获此错误并还原之前安装的版本。

所有这些回滚功能(第一部分至第三部分)都包含在一个用于测试的回滚更新失败功能插件中。

添加UTHEME为好友
扫码添加UTHEME微信为好友
· 分享WordPress相关技术文章,主题上新与优惠动态早知道。
· 微信端最大WordPress社群,限时免费入群。