谈到安全性,我们知道定期更新WordPress安装(核心、主题和插件)的重要性,以及升级过程可能需要多长时间,尤其是当我们安装了大量插件时。通常建议按照以下步骤操作:
- 备份文件和数据库表
- 禁用插件
- 更新
- 启用插件
- 检查网站
对于单个网站来说,这可能是一项乏味的任务,而当我们必须更新五个、十个或更多网站时,这可能是一项烦人且复杂的工作。
为了提高安装安全性和简化站点管理的特定目的,WordPress 3.7引入了自动更新。默认情况下,这个很酷的功能是为次要版本(即维护和安全版本)和翻译文件启用的,但可以自定义任何类型的更新。因此,在这篇文章中,我们将研究如何在新版本的WordPress核心、主题或插件发布时自动执行升级过程。让我们深入了解WordPress自动更新!
WordPress自动更新
- WordPress自动更新
- 通过wp-config.php控制后台更新
- 通过API过滤器控制后台更新
- 结果、通知和调试电子邮件
- 何时以及为何禁用WordPress自动更新
- 使用插件控制WordPress自动更新
- 高级插件和主题的自动更新
WordPress自动更新
有四种类型的更新和WordPress自动更新:
- 核心更新
- 插件更新
- 主题更新
- 翻译文件更新
核心更新分为三个子类型:
- 核心开发(仅适用于开发安装)
- 次要核心更新(维护和安全)——在稳定安装中默认启用
- 主要核心更新
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允许我们控制核心更新(次要、主要和开发版本)。这个常数可以定义如下:
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’ );
# 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_DISABLED
在wp-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_plugin’, ‘__return_true’ );
add_filter( ‘auto_update_translation’, ‘__return_true’ );
add_filter( 'auto_update_theme', '__return_true' ); add_filter( 'auto_update_plugin', '__return_true' ); add_filter( 'auto_update_translation', '__return_true' );
在上面的示例中,我们刚刚启用了自动更新。但是这些过滤器让我们可以更好地控制更新。在以下示例中,我们将自动更新两个特定插件:
$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 );
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 );
回调函数保留两个参数:
$update
: 设置是否更新的布尔值;$item
:更新offer对象。
该函数检查要更新的项目是否在$plugins
数组中,然后相应地返回true或false。
最后,我们可以通过返回true
或false
通过以下过滤器来区分开发、次要和主要更新:
add_filter( ‘allow_minor_auto_core_updates’, ‘__return_true’ );
add_filter( ‘allow_major_auto_core_updates’, ‘__return_true’ );
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将不会发送结果电子邮件:
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 );
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自动更新
如果您不是开发人员,则可以使用