深入了解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 );
define( ‘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’ );
# 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’ );
# 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 );
define( ‘DISALLOW_FILE_MODS’, 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’ );
add_filter( ‘automatic_updater_disabled’, ‘__return_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_core’, ‘__return_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’ );
add_filter( ‘auto_update_theme’, ‘__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' );

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

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 );
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 );
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’ );
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’ );
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’ );
apply_filters( ‘auto_core_update_send_email’, ‘__return_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 );
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 );
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’ );
apply_filters( ‘send_core_update_notification_email’, ‘__return_true’ );
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’ );
apply_filters( ‘automatic_updates_send_debug_email’, ‘__return_true’ );
apply_filters( 'automatic_updates_send_debug_email', '__return_true' );

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

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

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

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

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

使用插件控制WordPress自动更新

如果您不是开发人员,则可以使用

重要声明

本网站的文章部分内容可能来源于网络,如有侵犯你的权益请联系邮箱:wxzn8@outlook.com
站内资源为网友个人学习或测试研究使用,未经原版权作者许可,禁止用于任何商业途径!请在下载24小时内删除!本站资源大多存储在云盘,如发现链接失效请反馈,我们会及时更新。

给TA打赏
共{{data.count}}人
人已打赏
WordPress基础学习

MySQL存储引擎 – 如何将MyISAM转换为InnoDB

2023-1-13 19:23:32

WordPress基础学习

如何为WordPress配置免费电子邮件SMTP服务器

2023-1-13 19:24:50

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
今日签到
有新私信 私信列表
搜索