Как отключить проверки обновлений в WordPress для ядра, плагинов и тем

Как полностью отключить проверки обновлений 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 для ядра, плаги��ов и тем. Надеюсь, эта информация была полезной!

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *