WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru

Авто-обновления в 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

38 комментов
Полезные 4 Вопросы 1 Все
  • @ Алексей cайт: впроцессе

    Привет!

    У меня вопрос. Отдельно темы с вопросами не нашел, форума вроде тоже нет, поэтому напишу тут.
    Лучше строить сайт только на основе плагинов или взять тему и её допиливать с помощью плагинов? Тема привлекает общей степенью готовности для запуска. Есть темы с хорошим набором виджетов.

    Насколько плохо решение взять тему и расширять функционал сайта на её основе. Интересуют подводные камни и известные минусы.

    Прочитал уже с десяток статей примерно попадающих в область этого вопроса, но никак не могу определиться.

    Например, мне нравится какая-то тема, но на сайте мне надо в левом сайдбаре сделать свое кастомное древовидное меню, для которого в теме виджета не предусмотрено. В этом случае просто дописывать свой код или ставить плагин?

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

    Заранее благодарю.

    Ответить5.6 лет назад #
    • Kama7534

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

      Рассуждая о вашем вопросе: при разработке сайта вы так или иначе столкнетесь с доработкой и будите дорабатывать сайт чуть ли не всегда. Гораздо проще залезть в код и написать там вывод, нежели писать код да еще и виджет. Тоже касается и всего остального. Я бы порекомендовал, подобрать простенькую тему (не загруженную кучей кода и всевозможных настроек из админки) и дорабатывать её плагинами и вставками непосредственно в код, правда такую тему надо еще найти. Но это, еще раз повторяю, только мое мнение, вам может быть удобнее будет максимально использовать плагины и все те удобства предлагаемые WordPress для пользователей не знающих коддинг.

      Ответить5.6 лет назад #
      • @ Алексей cайт: впроцессе

        Именно из-за дизайна и готовой верстки блоков в сторону тем я и смотрю. Проблем с кодом нет. Просто нет уверенности, что правильно именно допиливать тему. Надеюсь темы к стороннему коду отнесутся нормально и будут еще и с плагинами нормально работать. И вот тут еще одна проблема - какую тему брать? Есть такие, что нравятся, но там своих виджетов мало или уступают другим по функционалу. Т.е., при одинаковых расценках, темы могут отличаться очень существенно. Есть какие-то сравнительные статьи или спецсайты по сравнению тем? Например, как wikimatrix или findthebest? Чтобы четко понимать, чем тема лучше/хуже.

        Ответить5.6 лет назад #
        • kulinaris cайт: kulinaris.ru

          Если

          Проблем с кодом нет
          берите фреймворк под вордпресс и допиливайте как хотите smile

          Ответить5.6 лет назад #
          • @ Алексей cайт: впроцессе

            Какой порекомендуете? Смотрю много их есть. Genesis (платный), Whiteboard, Roots/Reverie/Starkers/Bones для тем...

            Ответить5.6 лет назад #
    • nomad cайт: wpconfig.ru

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

      Ответить5.6 лет назад #
  • Posmein cайт: posmein.ru

    У меня вопрос, я первый раз поставил сайт на WP, у меня там всякие плагины, но уже вышло несколько обновлений. Слетят ли плагины после обновления или обнулятся может?
    Спасибо.

    Ответить5.6 лет назад #
  • Albinos24 cайт: ixmaster.net

    Оперативно статья появилась smile
    Сегодня утром клиенты по присылали письма "Андрей, а что, WP теперь сам обновляется?" )
    Хорошая и полезная статья, спасибо!

    Ответить5.6 лет назад #
  • Максат cайт: www.kstu.kz

    Спасибо очень полезная статья

    Ответить5.6 лет назад #
  • Евгений cайт: osdl.pp.ua

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

    Ответить5.5 лет назад #
    • Kama7534

      Что-то с кодировкой, в файлах или в базе данных. Делайте бэкап сайта, не забывайте.

      Ответить5.5 лет назад #
  • Александр

    А у меня автоматическое обновление вроде бы проходит, страница загружается, но потом соединение сбрасывается. При этом сайт работает и пишет, что установлена самая свежая версия. Вот и думаю, обновилось все, или часть с ошибками или не обновилось. Как вы считаете?

    Ответить5.5 лет назад #
  • VRS

    Доброй ночи.

    У меня в functions.php прописан код, отключающий уведомления о необходимости обновиться.

    #   темы    #
    remove_action('load-update-core.php','wp_update_themes');
    add_filter('pre_site_transient_update_themes',create_function('$a', "return null;"));
    wp_clear_scheduled_hook('wp_update_themes');
    
    #   плагины #
    remove_action( 'load-update-core.php', 'wp_update_plugins' );
    add_filter( 'pre_site_transient_update_plugins', create_function( '$a', "return null;" ) );
    wp_clear_scheduled_hook( 'wp_update_plugins' );
    
    #   движок  #
    add_filter('pre_site_transient_update_core',create_function('$a', "return null;"));
    wp_clear_scheduled_hook('wp_version_check');

    С переходом на ВП 3.7.1 стала периодически появляться надпись:

    Notice: Произошла непредвиденная ошибка. Что то произошло с WordPress.org или с конфигурацией вашего сервера. Если у вас не прекращается проблема, попробуйте обратиться на форумы поддержки. (WordPress could not establish a secure connection to WordPress.org. Please contact your server administrator.) in ---------\wp-includes\update.php on line 399

    Это ведь из-за автообновления?

    Достаточно будет добавить Ваш код, отключающий автообновления?

    Ответить5.5 лет назад #
  • Женя

    Скажите пожалуйста, у меня вордпресс версии 3.8. Приходит уведомление на почту, что было автоматическое обновление на 3.8.1 к примеру, заходя в админку, ведет себя как обновленный движок, но если зайти на вкладку обновления сразу же начинает предлагать обновление на 3.8.1, на всех страницах админки появляется оповещение о новой версии. Стоит ли еще раз обновляться? или это просто какой-то глюк? Не первый раз такое

    Ответить5.2 лет назад #
    • Kama7534

      Странно, действительно глюк. Обновитесь повторно.

      Ответить5.2 лет назад #
  • @ Олег cайт: studio.solutions

    Интересует такой вопрос, после обновления WordPress сторонние темы корректно будут отображаться, или в них нужно будет вносить изменения?
    После обновления других cms, темы не корректно отображаются, приходится их редактировать, а как обстоят дела с WordPress?

    Ответить4.9 года назад #
    • Kama7534

      Зависит от качества темы. На этот вопрос нет однозначного ответа! Разработчики WordPress максимально стараются сохранить обратную совместимость, но все же она сохраняется не всегда. Вам нужно попробовать обновить движок на локалке, протестировать тему и только потом обновляться. Очень грубо могу сказать - обновляться безопасно в 90% случаев, обновляться нужно!

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

    Если поставить хоть один фильтр
    Fatal error: Call to undefined function add_filter() in wp-config.php on line 86

    Ответить4.7 года назад #
    • Kama7534

      Фильтры нужно использовать в файле темы functions.php, а еще лучше в плагинах... В wp-config.php можно использовать только константы...

      Ответить4.7 года назад #
Здравствуйте, !     Войти . Зарегистрироваться