Как полностью отключить проверки обновлений WordPress для ядра, плагинов и тем
В WordPress можно полностью отключить проверки обновлений для всего — ядра, тем, плагинов и переводов. Для этого нужно установить значение true
в константе DISALLOW_FILE_MODS
. Однако стандартного способа отключить обновления только для ядра или плагинов/тем не существует.
Содержание
- Правильное отключение проверок обновлений ядра WP
- Отключение обновлений ядра WP, но сохранение обновлений переводов ядра
- Отключение проверок обновлений ядра и переводов ядра
- Подробности
- Как это работает?
- Почему я решил написать об этом?
- Что насчет переводов?
- Отключение проверок обновлений тем
- Отключение проверок обновлений плагинов
- Все плагины
- Определенные плагины
Примечание: Не стоит путать проверки обновлений и автоматические обновления. Отключение автоматических обновлений — это просто, но это не то же самое, что отключение проверок для новых версий. При отключении автоматических обновлений проверки на новые версии, уведомления о них и возможность обновления остаются.
Отключение обновлений WordPress может быть необходимо, например, если мы хотим вручную обновить ядро WordPress, но в то же время оставить возможность обновления плагинов и тем через панель администратора.
Правильное отключение проверок обновлений ядра WP
Отключение обновлений ядра WP, но сохранение обновлений переводов ядра
Чтобы отключить обновления ядра, но оставить обновления переводов, используйте следующий код:
add_filter( 'pre_set_site_transient_update_core', static function( $upinfo ) {
$upinfo->updates = [];
return $upinfo;
});
В этом случае WordPress будет делать HTTP-запрос для проверки новых версий, но мы сбрасываем обновления, и в конечном итоге остаются только данные об обновлениях переводов ядра.
Отключение проверок обновлений ядра и переводов ядра
Чтобы полностью отключить проверки обновлений ядра и переводов ядра, используйте этот код:
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;
});
При этом WordPress не ��удет делать HTTP-запрос для получения новых версий, и обновлений не будет.
Подробности
Теперь давайте углубимся в детали.
Как это работает?
Чтобы узнать, есть ли новые версии, 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
)
)
)
Как видно, элемент переводов содержит данные о версии перевода. Если вы полностью отключите запрос или замените его на null, то данных о новых версиях переводов не будет.
Отключение проверок обновлений тем
Для отключения проверки обновлений тем используйте следующий код:
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;
});
Отключение проверок обновлений плагинов
Все плагины
Чтобы отключить проверки обновлений для всех плагинов, используйте этот код:
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". Для этого зайдите в "Панель администратора > Плагины > Редактор > Выберите плагин" и в самом начале увидите такие строки:
Замените строку 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
Если вставка кода в плагин невозможна, вы можете использовать предыдущий код вне плагина для отмены проверки обновлений. Удобно вставлять в плагин, потому что там мы можем динамически получить его базовое имя, например: plugin_folder_name/plugin_main_file.php
.
Пример для плагина Akismet:
add_filter( 'pre_site_transient_update_plugins', static function( $value ) {
unset( $value->response['akismet/akismet.php']);
return $value;
});
Теперь вы знаете, как полностью отключить проверки обновлений в WordPress для ядра, плаги��ов и тем. Надеюсь, эта информация была полезной!