Авто-оновлення в 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_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_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');


Плагіни


Easy Updates Manager

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


Disable All WordPress Updates

Простий плагін без налаштувань – повністю відключає авто-оновлення та все що пов’язано з оновленнями плагінів, тим, перекладів та ядра… Встановлюємо, активуємо та забуваємо про всі оновлення…

Залишити коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *