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

Авто-обновления в 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. В этих версиях добавляется новый функционал.
      По умолчанию: Отключено

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

  3. Темы.
    По умолчанию: Отключено

  4. Плагины.
    По умолчанию: Отключено
Включено по умолчанию

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

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

Темы и плагины также не подлежат авто-обновлению, по понятным причинам...

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

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

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

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

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

Глобальное отключение авто-обновлений

Тут описаны варианты полного отключения авто-обновлений, отключает возможность как-либо настраивать авто-обновления на низком уровне, например через WP_AUTO_UPDATE_CORE (см. ниже).

Полностью отключить автообновления можно пятью способами.

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

Если определить эту константу в файле wp-config.php или в плагине, то все автообновления будут отключены:

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

Однако такое отключение можно «перебить» хуком automatic_updater_disabled.

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. CRON

Все авто-обновления работают на основе CRON задач. Поэтому если отключить крон на сайте: указать в файле wp-config.php строку:

define( 'DISABLE_WP_CRON', true );

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

5. DISALLOW_FILE_MODS

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

define( 'DISALLOW_FILE_MODS', true );

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

Изменять настройки авто-обновления ядра 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 );

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

// авто-обновление минорных версий (версии внутри ветки)
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' );

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

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

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

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

Используйте __return_false вместо __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

Примеры

Давайте оставим включенным только обновления плагинов и тем, и отключим обновления ядра и локализации, также отключим уведомления на почту. Для этого поместим следующий код в плагин или 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

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

Advanced Automatic Updates

Для управления автообновлением создан плагин  Advanced Automatic Updates.

Плагин отключает автообновление при активации и позволяет включить обновления по типам:

  • Включить автообновление между ветками версий (major versions);

  • Включить автообновление ядра внутри ветки (Minor and security versions);

  • Включить автообновление плагинов (Update your plugins);

  • Включить автообновление тем (Update your themes);

  • Изменить почту на которую будут приходить письма об обновлении. Или отключить уведомление на почту (Disable email notifications);

  • Когда получать уведомления об ошибках (Debug Information).

Страница в админке после установки:

Админка плагина Advanced Automatic Updates

Вечерних платьев Эльза

Салон свадебных и вечерних платьев Эльза.

www.spokoynoi-nochi.ru

Авто-обновления в WordPress 34 комментария
Полезные 3 Вопросы 1 Все
  • Vlad

    Доброго здоровья, Тимур. А не подскажете, каким образом вообще отключить движок WP от соединения с сервером wordpress.org??? Это я к чему, в принципе создать нагрузку на сервер где находится сайт на WP , достаточно легко... Этим пользуются некоторые хостеры, втюхивая затем, облачные серверы для движка, естественно за неприличный деньги...
    Заранее благодарен.

    1
    Ответить2.5 года назад #
    • Kama4464

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

      Ответить2.5 года назад #
    • Djalin @

      Оптимизация и ВП летает даже на шареде -по крайненй мере у меня хостился человек и 500+ держало без проблем.

      Какая у вас посещаемость?

      +

      Ответить2.5 года назад #
      • vlad

        Посещаемость от 500 до 1000...
        Дело НЕ в посещаемости... Смотрю логи сервера, там ВСЕ прекрасно видно... допустим, появилось обновление плагина hyper cache, нагрузка сразу возрастает, появилась новая версия движка и опять тот же эффект... ВСЕ необходимые мероприятия по оптимизации и прочее... проведены(занимаюсь ЭТИМ не один год!)Даже функциональность наполовину и движка и темы срезал, чтоб не грузить сервер, остался перерасход лимита только при соединении с wordpress.org. Кстати не понял глюк или как, версия 4.1 уже три раза в подряд обновляется...(одна и та же!).
        Как то так.

        1
        Ответить2.5 года назад #
  • Djalin @

    ЛОЛ сам ВП втюхивает https://wordpress.org/hosting/

    -2
    Ответить2.5 года назад #
    • Kama4464

      Где это он втюхивает? И что тут такого, разработчики WordPress не люди что ли?..

      2
      Ответить2.5 года назад #
  • Nick @

    Можно ли отключить обновление определенного плагина?

    1
    Ответить1.9 года назад #
    • Kama4464

      Есть несколько вариантов:

      Первый

      Откройте главный файл плагина и установите в нем версию побольше 999.

      Второй

      ## Отключает уведомление о необходимости обновить плагин
      add_filter( 'site_transient_update_plugins', 'filter_plugin_updates' );
      function filter_plugin_updates( $value ) {
      	unset( $value->response['akismet/akismet.php'] );
      	return $value;
      }

      Или можно разместить вот такой код в сам файл плагина (в основной)

      add_filter('site_transient_update_plugins', 'dd_remove_update_nag');
      function dd_remove_update_nag($value) {
      	unset($value->response[ plugin_basename(__FILE__) ]);
      	return $value;
      }
      Ответить1.9 года назад #
      • campusboy1844 cайт: wp-plus.ru

        О, через поиск сюда попал. Ну так вот, 2 способ отлично работает на темах, а вот на плагинах частично. Частично, потому что если ставить старый плагин и, не активируя его, подправить эту цифру - всё чётко. Но если активировать и движок проверит новую версию - всё, звиздец, что ни делай - всё равно пишет "обновитесь". К примеру, к чему это приводит:

        Сейчас сканирую базу, есть инфа о версиях в transient опциях, но их удаление не решает проблему. Но дело явно теперь в базе, может знает кто решение?

        Ответить1.3 года назад #
        • campusboy1844 cайт: wp-plus.ru

          Блина-на, через 1 минуту решил проблему. Так всегда, пожалуешься и сразу решение находится. Итак, удаляем в базе 2 строчки в таблице wp_options:
          1) _site_transient_update_plugins (не уверен на 100%, что это было необходимо, но её удаление не несёт никаких последствий, так как после перезагрузки любой страницы движка снова восстановится, потому лучше стереть для уверенности)
          2) active_plugins (эту строку точно надо удалить/очистить). Последствия - все активированные плагины станут неактивными, в админке их надо будет активировать.

          Считаю, что связка 1 и 2 помогла решить проблему, потому что я удалил сразу 2 эти строки и стало всё на свои места.

          Ответить1.3 года назад #
          • campusboy1844 cайт: wp-plus.ru

            Кстати, именно с этим плагином (Advanced Custom Fields Pro) оказалось чуть всё сложнее, так как при входе в раздел "Обновления" движка снова появлялось уведомление об обновлении. Оказалось, что нужно провернуть не только фокус по 1 примеру из статьи и чистки базы, но и в самом основном файле движка (где меня версию его) изменить и глубже в коде версию, вот пример (изменил лишь версию):

            function initialize() {
            
            		// vars
            		$this->settings = array(
            
            			// basic
            			'name'              => __('Advanced Custom Fields', 'acf'),
            			'version'           => '26.3.1',
            
            			// urls
            			'basename'          => plugin_basename( __FILE__ ),
            			'path'              => plugin_dir_path( __FILE__ ),
            			'dir'               => plugin_dir_url( __FILE__ ),
            
            			// options
            			'show_admin'        => true,
            			'show_updates'      => true,
            			'stripslashes'      => false,
            			'local'             => true,
            			'json'              => true,
            			'save_json'         => '',
            			'load_json'         => array(),
            			'default_language'  => '',
            			'current_language'  => '',
            			'capability'        => 'manage_options',
            			'uploader'          => 'wp',
            			'autoload'          => false
            		);
            Ответить1.3 года назад #
  • llgruff34 cайт: vygodno.me

    Если WordPress в режиме Multisite

    Note: If the automatic updates is running the cron under Multisite (WPMS) as the main network site or primary site, automatic updates are not permitted to run ever.

Здравствуйте, !

Ваш комментарий