Авто-обновления в WordPress
В октябре 2013 года вышла версия WordPress 3.7, а вместе с ней и новая фишка - автоматические обновления.
Авто-обновление стала самой яркой, очень полезной и удобной штукой. Теперь, при выходе новой версии WordPress обновит себя сам.
- Общие знания про автообновления
- Полное Отключение авто-обновлений
- 1. AUTOMATIC_UPDATER_DISABLED — мягкое отключение
- 2. Хук automatic_updater_disabled — жесткое отключение
- 3. Хук auto_update_(type) — жесткое отключение
- 4. DISALLOW_FILE_MODS
- 5. WP Cron
- Авто-обновления Ядра WordPress (движка)
- Через Опции (с версии WP 5.6)
- Через константу WP_AUTO_UPDATE_CORE
- Через Хуки
- Авто-обновления Тем и Плагинов
- Авто-обновления Перевода
- Уведомления об авто-обновлении на почту
- Примеры
- Плагины
- Disable All WordPress Updates
Общие знания про автообновления
В WP есть 4 типа авто-обновлений:
-
Ядро WordPress (движок)
-
«минорные релизы» (minor) - версии веток, например: 3.7 > 3.7.1 > 3.7.2. В них исправляются ошибки, уязвимости и баги.
По умолчанию: Включено -
«мажорные релизы» (major) - основные версии, например: 3.9 > 4.0 > 4.1 > 4.2. В этих версиях добавляется новый функционал.
По умолчанию: Отключено (Включено с версии 5.6) - «релизы разработчиков» (development) - релизы альфа и бета версий. Работает только если у вас установлена альфа или бета версия WordPress.
По умолчанию: Включено, только если установлена альфа/бета версия движка
-
-
Файлы переводов.
По умолчанию: Включено -
Темы.
С WP 5.5 стало возможно включать авто-обновления для отдельных тем из админки, со страницы тем.По умолчанию: Отключено
-
Плагины.
С 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 );
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
— enabledauto_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 );
Если указаны хуки (см. ниже), то их установки перебивают значение этой константы.
Через Хуки
Также авто-обновление ядра можно настроить через хуки.
// авто-обновление минорных версий (версии внутри ветки) 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; } );
Чтобы включить или отключить обновления используйте __return_true или __return_false соответственно.
менюАвто-обновления Тем и Плагинов
По умолчанию авто-обновления отключены для тем и плагинов.
С версии 5.5 стало возможным включить авто-обновление для отдельных плагинов и тем. Делается это в админке. Подробнее про это читайте здесь.
// Включение авто-обновлений для всех плагинов 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; // обновлять else 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 );
Примеры
Давайте оставим включенным только обновления плагинов и тем, и отключим обновления ядра и локализации, также отключим уведомления на почту. Для этого поместим следующий код в плагин или 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' );меню
Плагины
Disable All WordPress Updates
Простой плагин без настроек - полностью отключает авто-обновления и все что связано с обновлениями плагинов, тем, переводов и ядра... Устанавливаем, активируем и забываем обо всех обновлениях...