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

Click here to view original web page at wp-kama.ru

В 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;
} );

Указанных плагинов

add_filter( 'pre_site_transient_update_plugins', static function( $value ) {
	unset( $value->response['akismet/akismet.php'] );

	return $value;
} );