WordPress как на ладони

Авто-обновления в WordPress

В октябре 2013 года вышла версия WordPress 3.7, а вместе с ней и новая фишка - автоматические обновления.

Авто-обновление стала самой яркой, очень полезной и удобной штукой. Теперь, при выходе новой версии WordPress обновит себя сам.

Общие знания про автообновления

В WP есть 4 типа авто-обновлений:
  1. Сам WordPress (ядро, движок):

    • minor - минорные релизы - версии веток, например: 3.7 > 3.7.1 > 3.7.2. В них исправляются ошибки, уязвимости и баги.
      По умолчанию: Включено

    • major - мажорные релизы - основные версии, например: 3.9 > 4.0 > 4.1 > 4.2. В этих версиях добавляется новый функционал.
      По умолчанию: Отключено (Включено с версии 5.6)

    • development - релизы разработчиков - релизы альфа и бета версий. Работает только если у вас установлена альфа или бета версия WordPress.
      По умолчанию: Включено, только если установлена альфа/бета версия движка
  2. Переводы
    Файлы переводов ядра, тем, плагинов.
    По умолчанию: Включено

  3. Темы.
    С WP 5.5 стало возможно включать авто-обновления для отдельных тем из админки, со страницы тем.

    По умолчанию: Отключено

  4. Плагины.
    С WP 5.5 стало возможно включать авто-обновления для отдельных плагинов из админки, со страницы плагинов.

    По умолчанию: Отключено

Что включено по умолчанию

По умолчанию авто-обновление включено только для «минорных релизов ядра» и «файлов перевода». Если у вас установлена альфа или бета версия wordpress, то «релизы разработчиков» также включены по умолчанию.

«Мажорные релизы» не подлежат авто-обновлению, потому что в них добавляется новый функционал, который может нарушить работу сайта.

Темы и плагины также не подлежат авто-обновлению. Однако с версии 5.5 для отдельных тем или плагинов можно включить авто-обновление.

Изменение настроек авто-обновления

Изменять поведение авто-обновления можно через константы в файле wp-config.php (константы описаны ниже). Константы также можно указывать в плагинах, если они еще не определены.

Также есть специальные хуки для изменения поведения автообнолвения, которые можно использовать в плагинах, MU плагинах или в файле functions.php (там еще не поздно, проверено).

Какие классы ядра отвечают за авто-обновление

За общую логику авто-обновлений отвечает класс WP_Automatic_Updater{}. В зависимости от типа обновления он вызывает классы:

Полное Отключение авто-обновлений

Ниже описаны варианты полного отключения авто-обновлений: отключение самой возможности как-либо настраивать авто-обновления.

1. AUTOMATIC_UPDATER_DISABLED — мягкое отключение

Если определить эту константу в файле wp-config.php или в плагине, то все автообновления будут отключены. Однако такое отключение можно будет «перебить» хуком automatic_updater_disabled.

define( 'AUTOMATIC_UPDATER_DISABLED', true ); // полностью отключает автообновления

2. Хук automatic_updater_disabled — жесткое отключение

Чтобы отключить обновление полностью и не давать возможность изменять его через константу AUTOMATIC_UPDATER_DISABLED.

add_filter( 'automatic_updater_disabled', '__return_true' );

3. Хук auto_update_(type) — жесткое отключение

Хук auto_update_(type) - это аналог предыдущего хука, только он позволяет полностью отключить обновление только для указанного типа, а не все разом как это делает automatic_updater_disabled.

В динамическом параметре хука type указывается какой тип мы меняем. Так хук может принимать 4 вида:

// отключаем авто-обновления по типу
add_filter( 'auto_update_core', '__return_false' );       // обновление ядра
add_filter( 'auto_update_theme', '__return_false' );      // обновление тем
add_filter( 'auto_update_plugin', '__return_false' );     // обновление плагинов
add_filter( 'auto_update_translation', '__return_false'); // обновление файлов перевода

Чтобы включить или отключить авто-обновления используйте __return_true или __return_false соответственно.

4. DISALLOW_FILE_MODS

Авто-обновления будут отключены, если отключена возможно изменять файлы WordPress, через константу DISALLOW_FILE_MODS:

define( 'DISALLOW_FILE_MODS', true );

Если обновления нужно оставить, но при этом нужно отключить возможность редактировать файлы из админки, включите константу DISALLOW_FILE_EDIT.

5. WP Cron

Все авто-обновления работают на основе CRON задач. Поэтому если отключить крон на сайте, то все авто-обновления будут отключены.

Крон отключается следующей константой в файле wp-config.php:

define( 'DISABLE_WP_CRON', true );

Отключать крон крайне не рекомендуется, потому что он используется для очень разных задач плагинами и самим WordPress.

Авто-обновления Ядра WordPress (движка)

Через Опции (с версии WP 5.6)

Изменять настройки авто-обновления ядра WordPress, можно через опции. См. update_site_option():

  • auto_update_core_major — enabled (для новых сайтов) | unset (для старых сайтов)
  • auto_update_core_minor — enabled
  • auto_update_core_dev — enabled

Каждая опция определяет включено ли авто-обновление для мажорных/минорных/dev версий ядра WordPress соответственно. Возможные значения: enabled, disabled.

Если установлена константа WP_AUTO_UPDATE_CORE (см. ниже), то её значение перебивает значение этих опций.

Через константу WP_AUTO_UPDATE_CORE

Также, изменять настройки авто-обновления ядра WordPress, можно через константу WP_AUTO_UPDATE_CORE.

Её нужно добавить в файл wp-config.php или плагин:

// Включает обновления ядра только для минорных версий (по умолчанию)
define( 'WP_AUTO_UPDATE_CORE', 'minor' );

// Полностью отключает обновление ядра
define( 'WP_AUTO_UPDATE_CORE', false );

// Включает все обновления ядра (минорные и мажорные)
define( 'WP_AUTO_UPDATE_CORE', true );

Если указаны хуки (см. ниже), то их установки перебивают значение этой константы.

Через Хуки

Также авто-обновление ядра можно настроить через хуки.

Чтобы включить или отключить обновления используйте __return_true или __return_false соответственно.

// авто-обновление минорных версий (версии внутри ветки)
add_filter( 'allow_minor_auto_core_updates', '__return_false' );

// авто-обновление мажорных версий (версии между ветками)
add_filter( 'allow_major_auto_core_updates', '__return_false' );

// авто-обновление версий разработчиков
add_filter( 'allow_dev_auto_core_updates', '__return_false' );

// авто-обновление всех вариантов
add_filter( 'after_core_auto_updates_settings', function( $auto_update ){
	/*
	$auto_update = array(
		'dev'   => true,
		'minor' => true,
		'major' => false,
	);
	*/

	return $auto_update;
} );

Использовать эти хуки нужно в MU плагинах или в обычных плагинах, но не файле темы functions.php.

Авто-обновления Тем и Плагинов

По умолчанию авто-обновления отключены для тем и плагинов.

С версии 5.5 стало возможным включить авто-обновление для отдельных плагинов и тем. Делается это в админке. Подробнее про это читайте здесь.

Включить авто-обновления для плагинов и тем можно через следующие хуки:

Использовать эти хуки нужно в MU плагинах или в обычных плагинах, но не файле темы functions.php.

// Включение авто-обновлений для всех плагинов
add_filter( 'auto_update_plugin', '__return_true' );
// Включение авто-обновлений для всех тем
add_filter( 'auto_update_theme', '__return_true' );

Включение автообновления только для указанного плагина:

add_filter( 'auto_update_plugin', 'auto_update_specific_plugins', 10, 2 );

function auto_update_specific_plugins( $update, $item ){

	// Массив ярлыков плагинов, которые нужно авто-обновлять
	$plugins = array (
		'akismet',
		'buddypress',
	);

	if( in_array( $item->slug, $plugins ) ){
		return true; // обновлять
	}

	return $update; // вернем без изменений
}

Авто-обновления Переводов

Для управления обновлением перевода, есть хук:

// отключим авто-обновление файлов перевода
add_filter( 'auto_update_translation', '__return_false' );

Уведомления об авто-обновлении на почту

auto_core_update_send_email

При обновлении ядра, админ получает письмо об авто-обновлении. Такую отправку можно отключить через хук:

// отключим отправку письма об автообновлении
add_filter( 'auto_core_update_send_email', '__return_false' );

Почту куда отправлять письмо можно изменить через фильтр: auto_core_update_email:

$email = apply_filters( 'auto_core_update_email', $email, $type, $core_update, $result );

send_core_update_notification_email

Фильтрует, уведомлять ли администратора сайта о новом обновлении ядра.

По умолчанию администраторы получают уведомление, когда предложение обновления, полученное от WordPress.org, устанавливает определенный флаг. Это позволяет по своему усмотрению выбирать, уведомлять ли администратора о новом обновлении и когда.

Этот фильтр срабатывает только один раз за релиз. Если один и тот же адрес электронной почты уже был уведомлен об одной и той же новой версии, WordPress не будет повторно отправлять письмо администратору.

apply_filters( 'send_core_update_notification_email', '__return_true' );

automatic_updates_send_debug_email

Фильтрует, отправлять ли отладочное сообщение электронной почты при каждом фоновом автоматическом обновлении.

Такие письма отправляются, только если используется девелоперская версия WP get_bloginfo( 'version' ) === 6.0-dev.

Если вернуть false, WordPress не будет отправлять отладочные письма, в то время как true позволит отправлять эти письма даже в стабильных установках:

apply_filters( 'automatic_updates_send_debug_email', '__return_true' );

Примеры

Давайте оставим включенным только обновления плагинов и тем, и отключим обновления ядра и локализации, также отключим уведомления на почту.

Для этого поместим следующий код в плагин или MU плагин. ВАЖНО! Не используйте эти хуки в файле темы functions.php, там они не будут работать корректно.

// откл. обновл. ядра
add_filter( 'auto_update_core', '__return_false' );

// вкл. обновл. всех тем
add_filter( 'auto_update_theme', '__return_true' );

// вкл. обновл. всех  плагинов
add_filter( 'auto_update_plugin', '__return_true' );

// откл. обновл. всех  файлов перевода
add_filter( 'auto_update_translation', '__return_false' );

// отключаем письмо
add_filter( 'auto_core_update_send_email', '__return_false' );

Обновление/загрузка новых версий дефолтных Тем и Плагинов

Из коробки в WordPress присутуствуют встроенные темы и плагины. При каждой проверке обновлений также проверяются наличия новых версий этих тем, и плагинов, а также загружаются новые темы, которые идут в дефолтной конфигурации WordPress (каждый год новая тема).

В ВП есть настройка, которая позволяет отключить проверку обновлений и загрузку новых, таких вот, встроенных пакетов.

Подробнее: https://wp-kama.ru/id_15307/otklyuchaem-obnovlenie-zagruzku-novyh-versij-defoltnyh-tem-i-plaginov.html

Плагины

Easy Updates Manager

Популярный плагин, который позволит вам управлять всеми типами обновлений на сайте.

Disable All WordPress Updates

Простой плагин без настроек - полностью отключает авто-обновления и все что связано с обновлениями плагинов, тем, переводов и ядра... Устанавливаем, активируем и забываем обо всех обновлениях...

51 комментарий
Полезные 5Вопросы 1 Все
    Войти