深入了解WordPress自动更新

深入了解WordPress自动更新

谈到安全性,我们知道定期更新WordPress安装(核心、主题和插件)的重要性,以及升级过程可能需要多长时间,尤其是当我们安装了大量插件时。通常建议按照以下步骤操作:

  1. 备份文件和数据库表
  2. 禁用插件
  3. 更新
  4. 启用插件
  5. 检查网站

对于单个网站来说,这可能是一项乏味的任务,而当我们必须更新五个、十个或更多网站时,这可能是一项烦人且复杂的工作。

为了提高安装安全性和简化站点管理的特定目的,WordPress 3.7引入了自动更新。默认情况下,这个很酷的功能是为次要版本(即维护和安全版本)和翻译文件启用的,但可以自定义任何类型的更新。因此,在这篇文章中,我们将研究如何在新版本的WordPress核心、主题或插件发布时自动执行升级过程。让我们深入了解WordPress自动更新!

WordPress自动更新

WordPress自动更新

WordPress自动更新

有四种类型的更新和WordPress自动更新

  1. 核心更新
  2. 插件更新
  3. 主题更新
  4. 翻译文件更新

核心更新分为三个子类型:

  1. 核心开发(仅适用于开发安装)
  2. 次要核心更新(维护和安全)——在稳定安装中默认启用
  3. 主要核心更新

WordPress 允许您为这些类型中的任何一种自动更新过程,提供两个wp-config.php常量和大量API过滤器。

通过wp-config.php控制后台更新

WordPress提供了几个wp-config.php常量,允许我们控制自动更新。设置AUTOMATIC_UPDATER_DISABLED为true将禁用任何类型的自动升级:

define( 'AUTOMATIC_UPDATER_DISABLED', true );

WP_AUTO_UPDATE_CORE允许我们控制核心更新(次要、主要和开发版本)。这个常数可以定义如下:

# Disables all core updates:
define( 'WP_AUTO_UPDATE_CORE', false );
# Enables all core updates, including minor and major:
define( 'WP_AUTO_UPDATE_CORE', true );
# Enables minor updates:
define( 'WP_AUTO_UPDATE_CORE', 'minor' );

在开发安装中WP_AUTO_UPDATE_CORE默认为true。在稳定安装中,它默认为次要。

为了完整起见,我应该提到一个额外的常量,它可以定义为禁用自动更新。但是,将其值设置为true将禁用任何文件编辑,甚至主题和插件安装以及手动更新。

define( 'DISALLOW_FILE_MODS', true );

相反,您可能更喜欢定义DISALLOW_FILE_EDITS常量,这将禁用文件编辑器,但保证安装和更新功能的安全。

相关教程:  wp-config.php 文件——深入了解如何配置WordPress

通过API过滤器控制后台更新

配置常量提供了启用或禁用自动更新的通用方法。但是WordPress提供了许多过滤器,可以更深入地控制任何类型的更新。

注意:过滤器应该在插件中使用,“必须使用插件”是后台更新的一个不错的选择。mu-plugins驻留在/wp-content内的特定文件夹中,并由WordPress自动启用。这些插件不会出现在WordPress插件屏幕中,因此站点管理员不会意外禁用或删除它们。如需更深入的了解,请参阅Codex文档

首先,通过automatic_updater_disabled过滤器返回true与AUTOMATIC_UPDATER_DISABLEDwp-config.php中将常量定义为true具有相同的效果:

add_filter( 'automatic_updater_disabled', '__return_true' );

我们可以通过控制任何更新类型学auto_update_$type这使过滤器或禁用更新取决于价值$type'core''plugin''theme''translation')。

因此,我们可以通过auto_update_core过滤器返回true来自动化所有核心更新:

add_filter( 'auto_update_core', '__return_true' );

在以下示例中,我们启用了主题、插件和翻译的自动更新:

add_filter( 'auto_update_theme', '__return_true' );
add_filter( 'auto_update_plugin', '__return_true' );
add_filter( 'auto_update_translation', '__return_true' );

在上面的示例中,我们刚刚启用了自动更新。但是这些过滤器让我们可以更好地控制更新。在以下示例中,我们将自动更新两个特定插件:

function cb_auto_update_plugins ( $update, $item ) {
$plugins = array ( 'hello', 'akismet' );
if ( in_array( $item->slug, $plugins ) ) {
// update plugin
return true; 
} else {
// use default settings
return $update; 
}
}
add_filter( 'auto_update_plugin', 'cb_auto_update_plugins', 10, 2 );

回调函数保留两个参数:

  1. $update: 设置是否更新的布尔值;
  2. $item:更新offer对象。

该函数检查要更新的项目是否在$plugins数组中,然后相应地返回true或false。

最后,我们可以通过返回truefalse通过以下过滤器来区分开发、次要和主要更新:

add_filter( 'allow_dev_auto_core_updates', '__return_false' );
add_filter( 'allow_minor_auto_core_updates', '__return_true' );
add_filter( 'allow_major_auto_core_updates', '__return_true' );

我们知道有时更新会失败。在最坏的情况下,网站可能会在更新失败后关闭。但幸运的是,我们可以要求WordPress在任何更新(或尝试)后通过电子邮件通知我们。

结果、通知和调试电子邮件

根据更新过程的结果,WordPress会向管理员地址发送不同的电子邮件:

  • 在自动核心更新后发送结果电子邮件;
  • 当WordPress无法运行自动更新时发送通知电子邮件;
  • 调试电子邮件在WordPress的开发版本中发送。

每当自动更新成功或失败时,WordPress都会发送带有以下主题之一的结果或通知电子邮件:

  • 您的网站已更新为WordPress XXX(案例成功)
  • WordPress XXX可用。请更新!(更新失败,需要手动更新:案例失败)
  • 紧急:您的网站可能因更新失败而关闭(更新失败且WordPress可能关闭:案例关键)

auto_core_update_send_email过滤器控制结果和通知邮件。可以通过false如下返回来禁用这些电子邮件:

apply_filters( 'auto_core_update_send_email', '__return_false' );

特别是如果您计划将自动更新扩展到主要核心和/或主题和插件版本,您可能更愿意启用结果和通知电子邮件,或者根据结果或更新类型对其进行自定义。在以下示例中,如果成功,WordPress将不会发送结果电子邮件:

function cb_auto_core_update_send_email ( $send, $type, $core_update, $result ) {
if ( !empty( $type ) && $type == 'success' ) {
// don't send email
return false; 
}
// use default settings
return $send; 
}
}
add_filter( 'auto_core_update_send_email', 'cb_auto_core_update_send_email', 10, 4 );

回调函数保留以下参数:

  • $send 是一个布尔值,用于确定是发送结果还是通知电子邮件;
  • $type 是一个字符串,用于设置要发送的电子邮件类型(成功、失败或关键);
  • $core_update 是更新报价对象;
  • $result 是核心更新的结果(可以是WP_Error)。

默认情况下,当从WordPress.org收到的更新提议设置特定标志并且安装无法更新时,管理员会收到通知。每个版本只会发送一次通知电子邮件。send_core_update_notification_email过滤器允许在是否以及何时发送此类通知方面有一定的自由裁量权。按如下方式应用过滤器:

apply_filters( 'send_core_update_notification_email', '__return_true' );

最后,automatic_updates_send_debug_email过滤器控制调试电子邮件,它提供有关执行更新的有用日志信息。默认情况下,这些电子邮件由开发安装发送。返回false将阻止WordPress发送调试电子邮件,而返回true将启用这些电子邮件,即使在稳定安装中:

apply_filters( 'automatic_updates_send_debug_email', '__return_true' );

何时以及为何禁用WordPress自动更新

自动更新过程对许多用户来说是一项很棒的功能,因为他们可以节省大量时间和工作。但即使看起来自动更新真的很安全,我们也应该问问自己,启用所有这些是否总是一个好主意。

有时,我们可能会遇到主题和插件的不兼容问题,这可能会中断某些功能甚至破坏网站。如果网站依赖于大量插件,则执行手动更新可能更安全,至少对于插件而言。一对一的过程使我们能够快速检测自动化难以发现的问题。

此外,如果您是一名开发人员,即使您不打算分发它们,您也应该小心为主题和插件选择的名称。运行更新时,WordPress 会在插件目录中查找插件的新版本,并在找到同名插件时覆盖文件。因此,如果您想为主题和插件启用后台更新,请务必为您的脚本设置唯一的名称。

是的,这对开发人员来说是很多好东西。但是非开发人员用户如何管理自动更新?

使用插件控制WordPress自动更新

如果您不是开发人员,则可以使用插件控制WordPress自动更新。

Easy Updates Manager允许管理员用户在单站点和多站点安装上控制WordPress更新。该插件允许管理WordPress更新的所有类型,并且可以单独选择主题和插件进行自动更新。附加功能与通知电子邮件、用户阻止和记录插件更新有关。

Easy Updates Manager插件

Easy Updates Manager插件

在不兼容的情况下,可能需要快速恢复到主题或插件的先前版本。WP Rollback允许您从插件屏幕恢复任何已安装主题和插件的先前版本。只需单击回滚链接,插件就会向您显示所有可用版本的列表。不幸的是,如果您的网站出现故障,WP回滚将无济于事,所以不要忘记备份并仔细阅读在线文档。

WP Rollback插件

WP Rollback插件

最后,如果您需要对WordPress安装中的自动更新进行兼容性测试,Background Update Tester将提供您需要的信息。

高级插件和主题的自动更新

作为高级WordPress插件或主题的开发人员,您有责任将自动更新机制集成到您的产品中,以提供用户对WordPress.org产品所期望的无缝更新体验。这已成为当今的市场标准(有充分的理由)。您可以自己托管高级产品并开发更新机制,或利用FreemiusKernlWP Updates等平台,这些平台提供安全的存储库和开箱即用的自动更新即服务。

小结

WordPress自动更新是一项很棒的功能,可以为我们节省大量时间和工作,并使我们能够定期更新我们的网站。但是你会启用各种更新吗?请在下面的评论中告诉我们。

评论留言