Как полностью отключить проверку обновлений WordPress для ядра, плагинов, тем
В WP можно разом полностью отключить проверку обновлений всего (ядра, тем, плагинов и переводов). Для этого нужно указать true
в константе DISALLOW_FILE_MODS. Однако, нет стандартного способа полностью отключить проверку обновлений только файлов ядра или плагинов/тем.
Не путайте проверку обновлений и авто-обновления. Авто-обновления отключаются просто и это не тоже самое что проверка обновления (новых версий). При отключении авто-обновлений, проверка наличия новых версий, уведомления об этом и возможность обновиться остаются.
Деактивация обновлений самого WordPress может быть нужна когда, например, мы хотим обновлять ядро WordPress вручную (или через композер), но при этом мы хотим оставить возможность обновлять плагины/темы через админку.
Читайте также:
Правильно отключаем проверку обновлений ядра WP
Отключаем обновления ядра WP, но оставляем обновления переводов ядра
add_filter( 'pre_set_site_transient_update_core', static function( $upinfo ) { $upinfo->updates = []; return $upinfo; } );
В этом случае WP будет делать HTTP запрос на получение новых версий, но их мы обнуляем и в результате останутся только данные обновлений для переводов ядра.
Отключаем проверку обновлений ядра и переводов для ядра WP
add_filter( 'pre_site_transient_update_core', static function( $value ) { $upinfo = new stdClass(); $upinfo->updates = []; $upinfo->version_checked = $GLOBALS['wp_version']; $upinfo->last_checked = time(); return $upinfo; } );
В этом случае WP не будет делать HTTP запрос на получение новых версий и соответственно никаких обновлений не будет.
Смотрите Смотрите: wp_version_check().
Подробности
Теперь, если интересно, погрузимся в детали.
Как это работает?
Чтобы узнать появились ли новые версии, WordPress делает запросы к официальному серверу обновлений и сохраняет результат во временные опции:
update_core
- для ядра WordPress.update_plugins
- для плагинов.update_themes
- для тем.
Изменить значение каждой опции можно через хуки:
pre_site_transient_{$option_name}
- при получении. Пр:pre_site_transient_update_core
.pre_set_site_transient_{$option_name}
- при обновлении. Пр:pre_set_site_transient_update_core
.
Почему я решил написать об этом?
В интернете часто можно найти такой способ отключения обновлений ядра:
add_filter( 'pre_site_transient_update_core', '__return_null' );
Этот код работает, но неправильно:
- Не позволяет проверять обновления для переводов ядра WordPress.
- Не отключает HTTP запрос на проверку обновлений ядра.
- Создает PHP нотисы в админке.
Чтобы это исправить, нам нужно вернуть не null
, а объект данных, только подменить в нем данные так, чтобы WP "думал", что обновлений нет.
Правильный код, который решает эти недостатки, смотрите выше.
При чем тут переводы?
Если мы заглянем в функцию wp_get_translation_updates(), мы увидим, что для получения данных об обновлениях перевода, как и в функции wp_version_check(), данные берутся из get_site_transient( 'update_core' )
.
Эти данные выглядят так:
stdClass Object ( [updates] => Array ( [0] => stdClass Object ( [response] => latest [download] => https://downloads.wordpress.org/release/wordpress-6.3.1.zip [locale] => en_US [current] => 6.3.1 [version] => 6.3.1 [php_version] => 7.0.0 [mysql_version] => 5.0 ) ) [last_checked] => 1696017321 [version_checked] => 6.3.1 [translations] => Array ( [0] => Array ( [type] => core [slug] => default [language] => ru_RU [version] => 6.3.1 [updated] => 2023-09-27 08:44:56 [package] => https://downloads.wordpress.org/translation/core/6.3.1/ru_RU.zip [autoupdate] => 1 ) ) )
Как мы видим в элементе translations
находятся данные о версии перевода. И если полностью отключить запрос или заменить его на null, то и данных о новых версиях переводов не будет.
Отключаем проверку обновлений тем
Отключает проверку (включая отправку HTTP запроса на сервер обновлений):
add_filter( 'pre_site_transient_update_themes', static function( $value ) { static $themes; $themes || $themes = wp_get_themes(); $upinfo = new stdClass(); $upinfo->last_checked = time(); $upinfo->checked = []; foreach ( $themes as $theme ) { $upinfo->checked[ $theme->get_stylesheet() ] = $theme->get( 'Version' ); } return $upinfo; } );
Смотрите: wp_update_themes().
Отключаем проверку обновлений плагинов
Всех плагинов
Отключает проверку (включая отправку HTTP запроса на сервер обновлений):
// update plugins check remove add_filter( 'pre_site_transient_update_plugins', static function( $value ) { static $plugins; $plugins || $plugins = get_plugins(); $upinfo = new stdClass(); $upinfo->last_checked = time(); $upinfo->checked = []; foreach ( $plugins as $file => $p ) { $upinfo->checked[ $file ] = $p['Version']; } return $upinfo; } );
Указанных плагинов
Есть несколько способов отключить обновление конкретного плагина.
Способ 1: изменение версии плагина
При проверке сравниваются версии текущего плагина и плагина в каталоге WP, если версия в каталоге выше, то предлагается обновить плагин. Т.е. все что вам нужно сделать, это открыть плагин и изменить его версию на заведомо высшую.
Например, у вас есть плагин wp-super-cache
и нужно отключить его обновления. Открываем главный файл плагина wp-cache.php
. Для этого переходим в Админку > Плагины > Редактор > Выбор плагина
и видим в начале такие строки:
<?php /* Plugin Name: WP Super Cache Plugin URI: https://wordpress.org/plugins/wp-super-cache/ Description: Very fast caching plugin for WordPress. Version: 1.4.7 Author: Automattic Author URI: https://automattic.com/ License: GPL2+ Text Domain: wp-super-cache */
Заменяем версию, строку в строке Version: 1.4.7
на Version: 99991.4.7
и сохраняем изменения.
Готово! Теперь у вас самая старшая версия плагина, и обновлять её на меньшую WP никогда не будет...
Способ 2: вставка кода в плагин
Вставь вот такой код в основной файл плагина и готово!
add_filter( 'pre_site_transient_update_plugins', 'wpkama_disable_plugin_update' ); function wpkama_disable_plugin_update( $value ){ if( ! is_object( $value ) ){ return $value; } // удаляем текущий плагин из списка unset( $value->response[ plugin_basename( __FILE__ ) ] ); return $value; }
Способ 2.1: код для functions.php
Если вставлять код в плагин не вариант, то предыдущий код можно использовать за пределами плагина, чтобы отменить проверку его обновлений. Вставлять в плагин удобно, потому что там мы можем динамически получить его базовое им, которое обычно такое: название папки плагина/главный файл плагина.php
.
Пример для плагина Akismet:
add_filter( 'pre_site_transient_update_plugins', static function( $value ) { unset( $value->response['akismet/akismet.php'] ); return $value; } );
Смотрите wp_update_plugins().