了解并学会协使用wordpress自动更新

前几年大概是在2017年的时候,有一阵工作特别忙再加上有些犯懒,并没有坚持定期去维护甚至去查看一下博客,当有一天我闲下来去查看博客的时候突然发现博客不太对劲,有2篇文章内容和标题都被改了,并且留下了醒目的字眼Hacked By XwoLfTn。最后原因排查下来是因为我当时使用的那个wordpress版本有一个漏洞,攻击者可以利用该漏洞替换已发布文章的标题和内容,而且官方很早就紧急发布了更新补丁,但是由于我自己的疏忽和懈怠并没有及时发现并更新补丁最终导致了此次事故。

由此可知,对于使用开源框架搭建的站点来说及时更新真的非常重要,但还是存在一个问题,排除忘记的因素,对于单个网站来说,及时去维护和更新站点虽然麻烦,但是可能还是一件能接受的事情,但是如果有几个甚至几十个站点需要去一个个更新维护,那简直就是一场灾难。我们不得不考虑借助程序或者框架自身的能力来帮助我们维护和更新站点,就比如本站用的wordpress框架来说,框架自身带了自动更新功能,接下来我们了解一下wordpress的自行更新以及如何使用。​

为了提高站点安全性同时简化站点管理维护工作,wordpress自3.7版本起引入了自动更新,wordpress的自动更新主要分为4类:

一、核心更新

核心更新又分为3种子类型:

1、核心开发更新:我的理解针对的是一些新但并没有很完善或者很稳定的功能,用户可以抢先体验,但是有可能在稳定性方面会有一定的风险。

2、次要核心更新:主要针对的是一些维护和安全补丁之类的

3、主要核心更新

二、插件更新

三、主题更新

四、翻译文件更新

对于自动更新相关的控制主要有以下3种方法:

一、通过在wp-config.php中添加常量的方式

1、禁用任意类型的核心自动更新

define('AUTOMATIC_UPDATER_DISABLED', true);

2、控制部分核心类型自动更新

/* 核心开发自动更新、次要核心自动更新、主要核心自动更新均启用 */
define('WP_AUTO_UPDATE_CORE', false);

/* 核心开发自动更新、次要核心自动更新、主要核心自动更新均禁用 */
define('WP_AUTO_UPDATE_CORE', true);

/* 次要核心自动更新启用,核心开发自动更新、主要核心自动更新均禁用 */
define('WP_AUTO_UPDATE_CORE', 'minor');

二、通过在functions.php中添加过滤器的方式

1、禁用任意类型的自动更新

add_filter('automatic_updater_disabled', '__return_true');

2、启用/禁用任意类型的核心自动更新

/* 启用 */
add_filter('auto_update_core', '__return_true');

/* 禁用 */
add_filter('auto_update_core', '__return_false');

3、通常我们可能只想要精确控制某一种类型的核心自动更新,我们可以用以下方式:

/* 启用核心开发自动更新 */
add_filter('allow_dev_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_minor_auto_core_updates', '__return_false');

/* 启用主要核心自动更新 */
add_filter('allow_major_auto_core_updates', '__return_true');

/* 禁用主要核心自动更新 */
add_filter('allow_major_auto_core_updates', '__return_false');

4、启用/禁用插件的自动更新

/* 启用所有插件的自动更新 */
add_filter('auto_update_plugin', '__return_true');

/* 禁用所有插件的自动更新 */
add_filter('auto_update_plugin', '__return_false');

/* 启用部分插件的自动更新 */
function auto_update_specific_plugins($update, $item) {
    // 启用自动更新的插件slug列表
    $plugins = array(
    	'akismet',
        'buddypress',
    );
    if (in_array($item->slug, $plugins)) {
        return true;
    } else {
    	// 维持默认处理方式
        return $update;
    }
}
add_filter('auto_update_plugin', 'auto_update_specific_plugins', 10, 2);

5、启用/禁用主题自动更新

/* 启用所有主题的自动更新 */
add_filter('auto_update_theme', '__return_true');

/* 禁用所有主题的自动更新 */
add_filter('auto_update_theme', '__return_false');

6、启用/禁用翻译文件自动更新

/* 启用所有翻译文件的自动更新 */
add_filter('auto_update_translation', '__return_true');

/* 禁用所有翻译文件的自动更新 */
add_filter('auto_update_translation', '__return_false');

7、自动更新可能会带来一些隐患,比如因为插件冲突更新失败,可能导致整个站点挂掉,如果不能及时发现可能会影响用户访问,幸好wordpress为我们提供了更新通知,让我们可以在自动更新后知道更新的状态,是成功了还是失败了。我们可以通过以下方式来控制邮件发送功能:

/* 禁用更新邮件 */
add_filter('auto_core_update_send_email', '__return_false');

/* 只在更新不成功后发送邮件 */
function wpb_stop_update_emails($send, $type, $core_update, $result) {
	if (!empty($type) && $type == 'success') {
		return false;
	}
	return true;
}
add_filter('auto_core_update_send_email', 'wpb_stop_auto_update_emails', 10, 4);

三、通过插件的方式
在wordpress插件商店搜索并安装“Easy Updates Manager”插件,插件配置界面如下,可以按照自己的需求进行配置

  • 支付宝二维码 支付宝
  • 微信二维码 微信
相关文章