升级 WordPress – 详细说明
本页面包含升级说明的更详细版本。
备份 WordPress
在开始之前,最好备份您的网站。这样如果出现任何问题,您可以恢复网站。创建备份的完整说明可在 WordPress Backup 中找到。
一键升级
WordPress 允许您通过点击按钮进行更新。您可以通过点击新版本横幅中的链接(如果存在)或转到“仪表板 > 更新”屏幕来启动更新。一旦进入"Update WordPress"页面,点击"Update Now"按钮即可开始过程。您通常不需要做其他操作,完成后即已更新至最新版本。
一键更新适用于大多数服务器。如果您遇到问题,可能与文件系统的权限问题有关。
托管服务工具
如果您的网站托管在 cPanel 上(在左侧菜单栏中查找"WordPress Management")或 Plesk 上(在左侧菜单栏中查找"WordPress"),您可能可以使用 WP-Toolkit。您可以在 WP-Toolkit 内对 WordPress 网站执行一键更新。您还可以在 WP-Toolkit 中配置自动更新。
如果您的网站托管在 WP Squared 服务器上,当有新更新可用时,您将看到通知和按钮以执行 WordPress 网站的一键更新。默认情况下启用自动更新,并且您可以在 WP Squared 中配置是否启用或禁用自动更新。
托管提供商:如果您的工具未在此列出,欢迎在 Github 上提交 pull request 以添加它。
手动升级
升级流程概述
- 备份您的数据库。
- 备份 WordPress 目录中的所有 WordPress 文件。不要忘记您的
.htaccess文件。 - 验证您创建的备份是否存在且可用。这一点至关重要。
- 停用所有插件。
- 确保前四步已完成。除非已完成前四步,否则不要尝试升级。
- 从 https://wordpress.org/download/ 下载并解压 WordPress 包。
- 删除站点上的旧 WordPress 文件,但请勿删除
–wp-config.php文件;
–wp-content文件夹;特殊例外:wp-content/cache和wp-content/plugins/widgets文件夹应被删除。
–.htaccess文件 – 如果您已在.htaccess中添加了自定义规则,请勿删除它;
–robots.txt文件 – 如果您的博客位于站点根目录(即博客即为站点)且您创建了该文件,请勿删除它。 - 运行 WordPress 升级程序并按照屏幕上的说明操作。
- 更新固定链接和 .htaccess。
- 安装更新的插件和主题。
- 重新激活插件
- 查看 WordPress 中发生了哪些更改。
这就是升级流程的概述。请继续阅读详细的升级说明。
请记住,如果您遇到任何问题,请重读下面的说明以确保您遵循了正确的程序,并咨询故障排除:常见安装问题。
跨多个版本升级
虽然下面给出的方法是“安全”的方法,但只要拥有正确的备份,确实可以从 WordPress 的第一个版本直接升级到最新版本,只需一步即可。WordPress 支持此过程,并且在兼容性方面极其出色。不过,如果您的站点较大,升级过程可能需要比预期更长的时间,在这种情况下,增量方法可能会有所帮助。请记住保留工作站点的备份,以便始终有回退方案。
如果您计划跨越超过两个主要版本进行升级,应考虑增量升级以避免潜在冲突并最大限度地降低数据库损坏的风险。旧版本的 WordPress 可从发布存档下载。
WordPress 3.7 引入了易于使用的一键更新程序,它将带您直接前往当前版本。此更新步骤是安全的,可以从 3.7 版本一键更新到任何后续版本。
从 WordPress 0.7 – 3.6 升级(通过迁移)
目标:
– WordPress:升级到 WordPress 6.2
– PHP:升级到 PHP 7.4
– SQL:升级到 MySQL 8.0 / MariaDB 10.11
损失:
– 内容:无
– 插件:全部
– 主题:全部
这些是 WordPress 最古老的版本,且多年来已不再受支持。通常必须假设会有一些损失,虽然不是内容方面的损失,但可能是主题和插件功能方面的损失。
考虑到目标是保留内容并假设其余元素丢失,需要执行一些步骤。
与任何升级一样,首先要做的是制作备份副本。从 WP < 3.6 升级的最佳方法是执行内容迁移。
- 创建一个全新的 WordPress,不包含数据库。
- 将旧 WordPress 文件中"/wp-content/uploads/"的内容复制到新的 WordPress 中。
- 使用旧数据库信息创建新数据库。最好的方法是使用"mysqldump"。
- 使用所有新数据配置 wp-config.php。
- 访问"/wp-admin/"页面,并按照升级流程操作。
通过这种方式,WordPress 将能够维护并更新数据库中的内容,并能够在更新版本的 WordPress 中使用这些内容。
现在应该可以获取带有默认主题的所有内容的 WordPress。
字符编码在恢复数据库时通常会带来技术障碍。备份数据可能不是 UTF-8 编码,而是 ISO 或 ASCII“过时”格式。请确保在恢复数据库时正确更新了字符编码!有关转换 WordPress 数据库中的字符集的更多信息可在此处找到。
从 WordPress 3.7 – 4.0 升级
目标
– WordPress:升级到 WordPress 4.1
– PHP:升级到 PHP 5.6.20+
– SQL:升级到 MySQL 5.6 / MariaDB 10.0
损失:
– 内容:无
– 插件:可能有
– 主题:可能有
WordPress 版本 <= 4.0 兼容的 PHP 版本在当今很难找到。它们可能从 PHP 5.2(甚至更早)到 PHP 5.5 不等。因此,主要目标是转向在许多操作系统上仍然容易获取的版本。
数据库也会发生类似情况。很可能存在 MySQL 5.5 或更早版本。根据您是想继续使用 MySQL 还是迁移到 MariaDB,选择路径并将数据库迁移到 MySQL 5.6 或 MariaDB 10.0。
请注意,WP-CLI 不适用于低于 PHP 5.6.20 的 PHP 版本,因此此过程仍需部分手动完成。
与任何升级一样,首先要做的是制作备份副本。
删除所有非活动主题,仅保留主主题。如果有子主题处于活动状态,请保留子主题和父主题。
安装并激活 Twenty Ten 主题并激活它。该主题自 WordPress 3.7 起在所有站点中均可用。
同样,删除所有已停用的插件(因此无法工作)。
停用所有剩余的活跃插件。
现在,WordPress 将拥有:
– Core:任意版本(介于 WordPress 3.7 和 WordPress 4.0 之间)
– Themes:Twenty Ten 处于激活状态,主主题已停用。
– Plugins:所有应处于激活状态的插件均已停用。
此时,使用 WordPress 4.1 覆盖 WordPress Core,该版本可在 发布列表 中找到。安装 WordPress 4.1 主要版本,或者如果可用且推荐,则安装最新的 4.1.x 次要版本。
将系统升级至 PHP 5.6.20+ 以及 MySQL 5.6.x 或 MariaDB 10.0.x。请勿安装最新的重大版本。
访问"/wp-admin/"页面,并按照升级流程操作。
WordPress 将能够维护和更新数据库中的内容,并能正常使用这些内容。WordPress、默认主题及所有内容现在应均可用且正常运行。
字符编码在恢复数据库时通常会遇到技术障碍。备份数据可能未采用 UTF-8 编码,而是采用了 ISO 或 ASCII“已弃用”格式。请确保在恢复数据库时正确更新字符编码!有关 转换 WordPress 数据库字符集 的更多信息可在此处找到。
进入下一步,即从 WordPress 4.1 升级到 WordPress 4.9。
从 WordPress 4.1 – 4.8 升级
目标
– WordPress:升级至 WordPress 4.9
– PHP:升级至 PHP 7.2
– SQL:维持或升级至 MySQL 5.6 / MariaDB 10.0
损失:
– Content:无
– Plugins:可能有
– Themes:可能有
如果您尚未配置 PHP 5.6.20+,请立即配置。一切仍可能正常工作。
从 WordPress 4.1 和 PHP 5.6.20+ 开始,您可以继续进行手动更新过程,或者开始使用 WP-CLI,这是一个通过控制台直接运行 WordPress 命令的工具,可以简化流程。
与任何升级一样,首先要做的是制作备份副本。
移除所有非激活的主题,仅保留主主题。如果有子主题处于激活状态,请同时保留子主题和父主题。
安装并激活 Twenty Ten 主题。自 WordPress 3.7 起,该主题适用于所有站点。
同样,删除所有已停用的插件(即不工作的插件)。
现在,WordPress 将拥有:
– Core:任意版本(介于 WordPress 4.1 和 WordPress 4.8 之间)
– Themes:Twenty Ten 处于激活状态,主主题已停用。
– Plugins:所有应处于激活状态的插件均已停用。
此时,使用 WordPress 4.9 覆盖 WordPress Core,该版本可在 发布列表 中找到。安装 WordPress 4.9 主要版本,或者如果可用且推荐,则安装最新的 4.9.x 次要版本。
将系统升级至 PHP 7.2,如果不是的话,也升级至 MySQL 5.6.x 或 MariaDB 10.0.x。请勿安装最新的重大版本。
访问"/wp-admin/"页面,并按照升级流程操作。
WordPress 将能够维护和更新数据库中的内容,并能正常使用这些内容。WordPress、默认主题及所有内容现在应均可用且正常运行。
字符编码在恢复数据库时通常会遇到技术障碍。备份数据可能未采用 UTF-8 编码,而是采用了 ISO 或 ASCII“已弃用”格式。请确保在恢复数据库时正确更新字符编码!有关 转换 WordPress 数据库字符集 的更多信息可在此处找到。
进入下一步,即从 WordPress 4.9 升级到 WordPress 5.3。
WordPress 4.9 – 5.2
目标
– WordPress:升级至 WordPress 5.3
– PHP:升级至 PHP 7.4
– SQL:维持或升级至 MySQL 8.0 / MariaDB 10.3
损失:
– Content:无
– Plugins:可能没有
– Themes:可能没有
如果您尚未配置 PHP 7.4,请立即配置。一切仍可能正常工作。
WordPress 4.9 是最后一个包含 Classic Editor 的版本,因此许多担心新编辑器的人停止了 WordPress 更新。WordPress 5.0+ 完全兼容 Classic Editor 内容,因此可以在不丢失任何内容的情况下进行升级。
此外,当 WordPress 4.9 发布时,PHP 7.0+ 已经非常稳定,WordPress 5.0 版本也提供了支持。从 PHP 5.6.20+ 升级到 PHP 7.0+ 应该非常稳定。
从 WordPress 4.9 开始,您可以继续进行手动更新过程,或者开始使用 WP-CLI,这是一个通过控制台直接运行 WordPress 命令的工具,可以简化流程。
与任何升级一样,首先要做的是制作备份副本。
移除所有非激活的主题,仅保留主主题。如果有子主题处于激活状态,请同时保留子主题和父主题。
安装并激活 Twenty Ten 主题。自 WordPress 3.7 起,该主题适用于所有站点。
同样,删除所有已停用的插件。
现在,WordPress 将拥有:
– Core:任意版本(介于 WordPress 4.9 和 WordPress 5.2 之间)
– Themes:Twenty Ten 处于激活状态,主主题已停用。
– Plugins:所有应处于激活状态的插件均已停用。
此时,使用 WordPress 5.3 覆盖 WordPress Core,该版本可在 发布列表 中找到。安装 WordPress 5.3 主要版本,或者如果可用且推荐,则安装最新的 5.3.x 次要版本。
将系统升级至 PHP 7.4,如果不是的话,也升级至 MySQL 8.0.x 或 MariaDB 10.3.x。请勿安装最新的重大版本。
访问"/wp-admin/"页面,并按照升级流程操作。
WordPress 将能够维护和更新数据库中的内容,并能正常使用这些内容。
到达此阶段,请再次制作备份副本,因为还将进行更多更新,此时 WordPress 环境已较为理想。
WordPress 4.9+ 中大多数可用的插件应与 WordPress 5.3 兼容,因此请尝试更新插件列表中所有可用的插件。请逐个进行,并检查所有警告和错误。如果遇到重大错误,请尝试该插件的旧版本。通常它们位于 wordpress.org 每个插件页面的"Developer"标签末尾。
对主题也尝试同样的操作。WordPress 4.9+ 中大多数可用的主题应与 WordPress 5.3 兼容。
进入下一步,即从 WordPress 5.3 升级到 WordPress 6.2。
WordPress 5.3 – 6.2
目标
– WordPress:升级至 WordPress 6.2
– PHP:升级至 PHP 7.4
– SQL:维持或升级至 MySQL 8.0 LTS / MariaDB 10.11 LTS
损失:
– Content:无
– Plugins:可能没有
– Themes:可能没有
如果您尚未配置 PHP 7.4,请立即配置。一切仍可能正常工作。
正常升级所有内容。一切应能正常运行。
WordPress 6.3 – 6.8
目标
– WordPress:升级至 WordPress 6.8
– PHP:至少升级至 PHP 8.1(WordPress 6.6+ 支持 PHP 8.2)
– SQL:维持或升级至 MySQL 8.0 LTS / MariaDB 10.11 LTS
损失:
– Content:无
– Plugins:可能没有
– Themes:可能没有
如果您尚未配置 PHP 8.1,请立即配置。一切仍可能正常工作。
当 WordPress 6.3 发布时,PHP 5.6 的支持被取消,PHP 7.0 被确立为最低 PHP 版本。从 PHP 5.6.20+ 升级到 PHP 7.0+ 应该非常稳定。
当 WordPress 6.6 发布时,PHP 7.0 和 7.1 的支持被取消,PHP 7.2.24 被确立为最低 PHP 版本。从 PHP 7.0+ 或 PHP 7.1+ 升级到 PHP 7.2+ 应该非常稳定。WordPress 6.6 还支持 PHP 8.2,因此您可以在升级 WordPress 后尝试切换到 PHP 8.2。
正常升级所有内容。一切应能正常运行。
故障排除
布局混乱或出现错误
如果您的博客现在看起来混乱或出现行错误,可能是某个不支持新代码的旧插件所致。在您的 WordPress 管理界面 中,停用所有默认未随 WordPress 提供的插件。然后逐个重新激活它们。
是否进行了自定义更改/黑客修改?
如果您对其他 WordPress 文件进行了更改(即“黑客”修改了 WordPress),您应该跟踪您的更改。您需要将这些编辑转移到新代码中。WordPress 版本列出了每个发布版本中更改的文件。
避免使用旧代码
升级使您获得最新、最好的代码。使用您的旧代码,无论您对其进行了多少定制,几乎肯定会引发问题。 temptation 去使用您旧的修改代码的诱惑很大,但出错的几率要大得多。
我可以回退到旧版本吗
您可以这样做,但通常不建议将当前版本回滚(还原)到旧版本。这是因为新版本通常包含安全更新,而回滚可能会使您的站点面临风险。其次,不同版本之间的数据库结构变化可能会导致维护站点内容、帖子、评论以及依赖于数据库中存储信息的插件时出现复杂情况。如果您执意要这样做,请自行承担风险。请注意,如果在尝试升级之前没有对整个站点和数据库进行备份,成功回滚几乎是不可能的。删除所有 WordPress 文件,除了 wp-config。从备份中上传文件到您的服务器,并恢复您的数据库备份。请记住,您必须拥有良好的备份才能使回滚生效。对于较旧的 WordPress 版本,回滚可能不起作用。
获取更多帮助
如果在升级后遇到任何错误,请查看故障排除:常见安装问题、故障排除以及安装类别的文章。如果您找不到答案,请在WordPress 支持论坛上提出一个清晰的问题。他们可能会问您是否使用了旧代码。然后他们会告诉您需要更改它,所以您现在就可以更改 🙂。
配置自动后台更新
更新类型
自动后台更新于WordPress 3.7引入,旨在促进更好的安全性,并简化整体更新体验。默认情况下,大多数站点的 WordPress 自动更新已启用。在特殊情况下,插件和主题也可能被自动更新。翻译文件默认会自动更新。
在 WordPress 中,有四种类型的自动后台更新:
- 核心更新
- 插件更新
- 主题更新
- 翻译文件更新
核心更新
核心更新细分为三种类型:
- 核心开发更新,称为“边缘版”(bleeding edge)
- 次要核心更新,如维护和发布更新
- 主要核心版本更新
在 WordPress 5.6 之前,默认情况下每个站点仅启用了次要核心版本和翻译文件的自动更新。从 WordPress 5.6 开始,除非 WordPress 检测到版本控制检出,否则新安装的站点默认同时启用次要和主要核心版本的自动更新。现有安装保持之前的行为,除非站点管理员、常量或过滤器启用了主要核心自动更新。
已经运行开发版本的站点也默认启用了进一步开发版本的自动更新。
更新配置
可以使用两种方法之一配置自动更新:在 wp-config.php 中定义常量,或使用插件添加过滤器。
通过 wp-config.php 配置
使用 wp-config.php,可以完全禁用自动更新,也可以根据更新类型禁用或配置核心更新。
禁用所有更新的常量
核心开发人员经过深思熟虑,决定开箱即用即启用次要版本和翻译文件的自动更新。未来这将是确保您的站点保持最新和安全的最有效方式之一,因此强烈不建议禁用这些更新。
要完全禁用所有类型的自动更新(无论是核心还是其他),请在您的 wp-config.php 文件中添加以下内容:
define( 'AUTOMATIC_UPDATER_DISABLED', true );
配置核心更新的常量
要为重大版本或开发目的启用自动更新,应从 WP_AUTO_UPDATE_CORE 常量开始。以以下三种方式之一定义此常量,可以一次性全面启用或全面禁用多种类型的核心更新。
define( 'WP_AUTO_UPDATE_CORE', true );
WP_AUTO_UPDATE_CORE 可以用以下三个值之一定义,每个值都会产生不同的行为。设置后,该常量将覆盖 wp-admin 中“更新”屏幕上提供的用户可控制的自动更新设置。
true的值 – 开发、次要和主要更新全部启用false的值 – 开发、次要和主要更新全部禁用'minor'的值 – 次要更新启用,开发和主要更新禁用
注意,只有已经运行开发版本的站点才会接收开发更新。
如果未定义 WP_AUTO_UPDATE_CORE,WordPress 将使用该站点的当前自动更新设置以及该安装类型的默认行为。现有安装默认接收次要核心更新。在 WordPress 5.6 或更高版本上创建的新安装默认接收次要和主要核心更新,除非 WordPress 检测到版本控制检出。运行开发版本的站点默认接收开发更新。
通过过滤器配置
使用过滤器可以实现对自动更新的精细控制。
放置这些过滤器的最佳位置是在必须使用的插件中。
不要直接在 wp-config.php 中添加 add_filter() 调用。此时 WordPress 尚未完全加载,可能会与其他应用程序(如 WP-CLI)发生冲突。
通过过滤器禁用所有更新
您也可以使用以下过滤器禁用所有自动更新:
add_filter( 'automatic_updater_disabled', '__return_true' );
通过过滤器配置核心更新
若要仅启用所有核心类型的更新,请使用以下过滤器:
add_filter( 'auto_update_core', '__return_true' );
但是,假设您不想启用或禁用所有三种类型的核心更新,而是想选择性地启用或禁用它们。这时就需要用到 allow_dev_auto_core_updates、allow_minor_auto_core_updates 和 allow_major_auto_core_updates 过滤器。
WordPress 内置了两个简写函数,允许您用单行代码启用或禁用特定类型的核心更新。它们是 __return_true 和 __return_false。以下是一些示例过滤器:
若要专门启用它们(禁用时,请将true替换为false):
add_filter( 'allow_dev_auto_core_updates', '__return_true' ); // 启用开发更新
add_filter( 'allow_minor_auto_core_updates', '__return_true' ); // 启用次要更新
add_filter( 'allow_major_auto_core_updates', '__return_true' ); // 启用主要更新
对于开发者:即使 WordPress 目录或其任何父目录中发现了 VCS 文件夹(.git、.hg、.svn 等),也要启用自动更新:
add_filter( 'automatic_updates_is_vcs_checkout', '__return_false', 1 );
通过过滤器配置插件和主题更新
默认情况下,自动后台更新仅在特殊情况下针对插件和主题发生,具体由 WordPress.org API 响应决定,该响应由 WordPress 安全团队控制,用于修补关键漏洞。若要启用或禁用所有情况下的更新,可以利用 auto_update_$type 过滤器,其中 $type 将被替换为"plugin"或"theme"。
所有插件的自动更新
add_filter( 'auto_update_plugin', '__return_true' );
所有主题的自动更新:
add_filter( 'auto_update_theme', '__return_true' );
您可以使用 __return_false 代替 __return_true 来专门禁用所有插件和主题更新,即使是 WordPress 安全团队强制推送的安全更新。
auto_update_$type 过滤器还支持更细粒度的控制,因为要更新的具体项目也会被传递给过滤器。如果您只想为特定插件启用自动更新,则可以使用如下代码:
function auto_update_specific_plugins ( $update, $item ) {
// 始终自动更新的插件 slug 数组
$plugins = array (
'akismet',
'buddypress',
);
if ( in_array( $item->slug, $plugins ) ) {
// 始终更新此数组中的插件
return true;
} else {
// 否则,使用正常的 API 响应决定是否更新
return $update;
}
}
add_filter( 'auto_update_plugin', 'auto_update_specific_plugins', 10, 2 );
通过过滤器配置翻译更新
翻译文件自动更新默认已启用,与次要核心更新相同。
若要禁用翻译文件更新,请使用以下内容:
add_filter( 'auto_update_translation', '__return_false' );
通过过滤器禁用电子邮件
// Disable update emails
add_filter( 'auto_core_update_send_email', '__return_false' );
此过滤器也可用于根据电子邮件 $type(success、fail、critical)、更新类型对象 $core_update 或 $result 来操纵更新电子邮件:
/* @param bool $send Whether to send the email. Default true.
@param string $type The type of email to send. Can be one of 'success', 'fail', 'critical'.
@param object $core_update The update offer that was attempted.
@param mixed $result The result for the core update. Can be WP_Error.
*/
apply_filters( 'auto_core_update_send_email', true, $type, $core_update, $result );