# wp_version_check()

URL: https://chugunov.pro/api-wordpress/functions/wp_version_check/
Проверено на WordPress 6.9, обновлено 06.08.2026.
Источник: независимый русскоязычный справочник chugunov.pro. Не является официальной документацией WordPress.

Тип: функция.
Появился в версии: 2.3.0.

## Сигнатура

```php
wp_version_check( array $extra_stats = array(), bool $force_check = false )
```

## Описание

Версия WordPress, версия PHP и локаль отправляются на api.wordpress.org.
Проверка выполняется на сервере WordPress по адресу api.wordpress.org. Проверка выполняется только если WordPress не находится в процессе установки.

## Параметры

- `$extra_stats` `array` — необязательный, по умолчанию `array()`. Дополнительная статистика, отправляемая в API WordPress.org.
- `$force_check` `bool` — необязательный, по умолчанию `false`. Следует ли обойти кэш транзиента и принудительно выполнить новую проверку обновлений.
  
  Значение по умолчанию — false; true, если задано $extra_stats.

## Исходный код

Файл: `wp-includes/update.php:31`

```php
function wp_version_check( $extra_stats = array(), $force_check = false ) {
	global $wpdb, $wp_local_package;

	if ( wp_installing() ) {
		return;
	}

	$php_version = PHP_VERSION;

	$current      = get_site_transient( 'update_core' );
	$translations = wp_get_installed_translations( 'core' );

	// Invalidate the transient when $wp_version changes.
	if ( is_object( $current ) && wp_get_wp_version() !== $current->version_checked ) {
		$current = false;
	}

	if ( ! is_object( $current ) ) {
		$current                  = new stdClass();
		$current->updates         = array();
		$current->version_checked = wp_get_wp_version();
	}

	if ( ! empty( $extra_stats ) ) {
		$force_check = true;
	}

	// Wait 1 minute between multiple version check requests.
	$timeout          = MINUTE_IN_SECONDS;
	$time_not_changed = isset( $current->last_checked ) && $timeout > ( time() - $current->last_checked );

	if ( ! $force_check && $time_not_changed ) {
		return;
	}

	/**
	 * Filters the locale requested for WordPress core translations.
	 *
	 * @since 2.8.0
	 *
	 * @param string $locale Current locale.
	 */
	$locale = apply_filters( 'core_version_check_locale', get_locale() );

	// Update last_checked for current to prevent multiple blocking requests if request hangs.
	$current->last_checked = time();
	set_site_transient( 'update_core', $current );

	if ( method_exists( $wpdb, 'db_server_info' ) ) {
		$mysql_version = $wpdb->db_server_info();
	} elseif ( method_exists( $wpdb, 'db_version' ) ) {
		$mysql_version = preg_replace( '/[^0-9.].*/', '', $wpdb->db_version() );
	} else {
		$mysql_version = 'N/A';
	}

	if ( is_multisite() ) {
		$num_blogs         = get_blog_count();
		$wp_install        = network_site_url();
		$multisite_enabled = 1;
	} else {
		$multisite_enabled = 0;
		$num_blogs         = 1;
		$wp_install        = home_url( '/' );
	}

	$extensions = get_loaded_extensions();
	sort( $extensions, SORT_STRING | SORT_FLAG_CASE );
	$query = array(
		'version'            => wp_get_wp_version(),
		'php'                => $php_version,
		'locale'             => $locale,
		'mysql'              => $mysql_version,
		'local_package'      => $wp_local_package ?? '',
		'blogs'              => $num_blogs,
		'users'              => get_user_count(),
		'multisite_enabled'  => $multisite_enabled,
		'initial_db_version' => get_site_option( 'initial_db_version' ),
		'myisam_tables'      => array(),
		'extensions'         => array_combine( $extensions, array_map( 'phpversion', $extensions ) ),
		'platform_flags'     => array(
			'os'   => PHP_OS,
			'bits' => PHP_INT_SIZE === 4 ? 32 : 64,
		),
		'image_support'      => array(),
	);

	// Check for default tables using the MyISAM engine.
	$table_names   = implode( "','", $wpdb->tables() );
	$myisam_tables = $wpdb->get_results(
		$wpdb->prepare(
			// phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared -- This query cannot use interpolation.
			"SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA = %s AND TABLE_NAME IN ('$table_names') AND ENGINE = %s;",
			DB_NAME,
			'MyISAM'
		),
		OBJECT_K
	);

	if ( ! empty( $myisam_tables ) ) {
		$all_unprefixed_tables = $wpdb->tables( 'all', false );

		// Including the table prefix is not necessary.
		$unprefixed_myisam_tables = array_reduce(
			array_keys( $myisam_tables ),
			function ( $carry, $prefixed_myisam_table ) use ( $all_unprefixed_tables ) {
				foreach ( $all_unprefixed_tables as $unprefixed ) {
					if ( str_ends_with( $prefixed_myisam_table, $unprefixed ) ) {
						$carry[] = $unprefixed;
						break;
					}
				}
				return $carry;
			},
			array()
		);

		$query['myisam_tables'] = $unprefixed_myisam_tables;
	}

	if ( function_exists( 'gd_info' ) ) {
		$gd_info = gd_info();
		// Filter to supported values.
		$gd_info = array_filter( $gd_info );

		// Add data for GD WebP, AVIF, HEIC and JPEG XL support.
		$query['image_support']['gd'] = array_keys(
			array_filter(
				array(
					'webp' => isset( $gd_info['WebP Support'] ),
					'avif' => isset( $gd_info['AVIF Support'] ),
					'heic' => isset( $gd_info['HEIC Support'] ),
					'jxl'  => isset( $gd_info['JXL Support'] ),
				)
			)
		);
	}

	if ( class_exists( 'Imagick' ) ) {
		// Add data for Imagick WebP, AVIF, HEIC and JPEG XL support.
		$query['image_support']['imagick'] = array_keys(
			array_filter(
				array(
					'webp' => ! empty( Imagick::queryFormats( 'WEBP' ) ),
					'avif' => ! empty( Imagick::queryFormats( 'AVIF' ) ),
					'heic' => ! empty( Imagick::queryFormats( 'HEIC' ) ),
					'jxl'  => ! empty( Imagick::queryFormats( 'JXL' ) ),
				)
			)
		);
	}

	/**
	 * Filters the query arguments sent as part of the core version check.
	 *
	 * WARNING: Changing this data may result in your site not receiving security updates.
	 * Please exercise extreme caution.
	 *
	 * @since 4.9.0
	 * @since 6.1.0 Added `$extensions`, `$platform_flags`, and `$image_support` to the `$query` parameter.
	 *
	 * @param array $query {
	 *     Version check query arguments.
	 *
	 *     @type string $version            WordPress version number.
	 *     @type string $php                PHP version number.
	 *     @type string $locale             The locale to retrieve updates for.
	 *     @type string $mysql              MySQL version number.
	 *     @type string $local_package      The value of the $wp_local_package global, when set.
	 *     @type int    $blogs              Number of sites on this WordPress installation.
	 *     @type int    $users              Number of users on this WordPress installation.
	 *     @type int    $multisite_enabled  Whether this WordPress installation uses Multisite.
	 *     @type int    $initial_db_version Database version of WordPress at time of installation.
	 *     @type array  $extensions         List of PHP extensions and their versions.
	 *     @type array  $platform_flags     List containing the operating system name and bit support.
	 *     @type array  $image_support      List of image formats supported by GD and Imagick.
	 * }
	 */
	$query = apply_filters( 'core_version_check_query_args', $query );

	$post_body = array(
		'translations' => wp_json_encode( $translations ),
	);

	if ( is_array( $extra_stats ) ) {
		$post_body = array_merge( $post_body, $extra_stats );
	}

	// Allow for WP_AUTO_UPDATE_CORE to specify beta/RC/development releases.
	if ( defined( 'WP_AUTO_UPDATE_CORE' )
		&& in_array( WP_AUTO_UPDATE_CORE, array( 'beta', 'rc', 'development', 'branch-development' ), true )
	) {
		$query['channel'] = WP_AUTO_UPDATE_CORE;
	}

	$url      = 'https://api.wordpress.org/core/version-check/1.7/?' . http_build_query( $query, '', '&' );
	$http_url = $url;
	$ssl      = wp_http_supports( array( 'ssl' ) );

	if ( $ssl ) {
		$url = set_url_scheme( $url, 'https' );
	}

	$doing_cron = wp_doing_cron();

	$options = array(
		'timeout'    => $doing_cron ? 30 : 3,
		'user-agent' => 'WordPress/' . wp_get_wp_version() . '; ' . home_url( '/' ),
		'headers'    => array(
			'wp_install' => $wp_install,
			'wp_blog'    => home_url( '/' ),
		),
		'body'       => $post_body,
	);

	$response = wp_remote_post( $url, $options );

	if ( $ssl && is_wp_error( $response ) ) {
		wp_trigger_error(
			__FUNCTION__,
			sprintf(
				/* translators: %s: Support forums URL. */
				__( 'An unexpected error occurred. Something may be wrong with WordPress.org or this server&#8217;s configuration. If you continue to have problems, please try the <a href="%s">support forums</a>.' ),
				__( 'https://wordpress.org/support/forums/' )
			) . ' ' . __( '(WordPress could not establish a secure connection to WordPress.org. Please contact your server administrator.)' ),
			headers_sent() || WP_DEBUG ? E_USER_WARNING : E_USER_NOTICE
		);
		$response = wp_remote_post( $http_url, $options );
	}

	if ( is_wp_error( $response ) || 200 !== wp_remote_retrieve_response_code( $response ) ) {
		return;
	}

	$body = trim( wp_remote_retrieve_body( $response ) );
	$body = json_decode( $body, true );

	if ( ! is_array( $body ) || ! isset( $body['offers'] ) ) {
		return;
	}

	$offers = $body['offers'];

	foreach ( $offers as &$offer ) {
		foreach ( $offer as $offer_key => $value ) {
			if ( 'packages' === $offer_key ) {
				$offer['packages'] = (object) array_intersect_key(
					array_map( 'esc_url', $offer['packages'] ),
					array_fill_keys( array( 'full', 'no_content', 'new_bundled', 'partial', 'rollback' ), '' )
				);
			} elseif ( 'download' === $offer_key ) {
				$offer['download'] = esc_url( $value );
			} else {
				$offer[ $offer_key ] = esc_html( $value );
			}
		}
		$offer = (object) array_intersect_key(
			$offer,
			array_fill_keys(
				array(
					'response',
					'download',
					'locale',
					'packages',
					'current',
					'version',
					'php_version',
					'mysql_version',
					'new_bundled',
					'partial_version',
					'notify_email',
					'support_email',
					'new_files',
				),
				''
			)
		);
	}

	$updates                  = new stdClass();
	$updates->updates         = $offers;
	$updates->last_checked    = time();
	$updates->version_checked = wp_get_wp_version();

	if ( isset( $body['translations'] ) ) {
		$updates->translations = $body['translations'];
	}

	set_site_transient( 'update_core', $updates );

	if ( ! empty( $body['ttl'] ) ) {
		$ttl = (int) $body['ttl'];

		if ( $ttl && ( time() + $ttl < wp_next_scheduled( 'wp_version_check' ) ) ) {
			// Queue an event to re-run the update check in $ttl seconds.
			wp_schedule_single_event( time() + $ttl, 'wp_version_check' );
		}
	}

	// Trigger background updates if running non-interactively, and we weren't called from the update handler.
	if ( $doing_cron && ! doing_action( 'wp_maybe_auto_update' ) ) {
		/**
		 * Fires during wp_cron, starting the auto-update process.
		 *
		 * @since 3.9.0
		 */
		do_action( 'wp_maybe_auto_update' );
	}
}
```

## История изменений

- 2.3.0 — Introduced.

## Связанные

Использует: [`wp_get_wp_version`](https://chugunov.pro/api-wordpress/functions/wp_get_wp_version/), [`wp_trigger_error`](https://chugunov.pro/api-wordpress/functions/wp_trigger_error/), `wpdb::db_server_info`, [`wp_doing_cron`](https://chugunov.pro/api-wordpress/functions/wp_doing_cron/), [`wp_installing`](https://chugunov.pro/api-wordpress/functions/wp_installing/), [`wp_next_scheduled`](https://chugunov.pro/api-wordpress/functions/wp_next_scheduled/), [`wp_schedule_single_event`](https://chugunov.pro/api-wordpress/functions/wp_schedule_single_event/), [`wp_get_installed_translations`](https://chugunov.pro/api-wordpress/functions/wp_get_installed_translations/), [`get_locale`](https://chugunov.pro/api-wordpress/functions/get_locale/), [`set_url_scheme`](https://chugunov.pro/api-wordpress/functions/set_url_scheme/), [`network_site_url`](https://chugunov.pro/api-wordpress/functions/network_site_url/), [`wp_http_supports`](https://chugunov.pro/api-wordpress/functions/wp_http_supports/), [`wp_remote_post`](https://chugunov.pro/api-wordpress/functions/wp_remote_post/), [`wp_remote_retrieve_response_code`](https://chugunov.pro/api-wordpress/functions/wp_remote_retrieve_response_code/), [`wp_remote_retrieve_body`](https://chugunov.pro/api-wordpress/functions/wp_remote_retrieve_body/), [`doing_action`](https://chugunov.pro/api-wordpress/functions/doing_action/), [`set_site_transient`](https://chugunov.pro/api-wordpress/functions/set_site_transient/), [`get_blog_count`](https://chugunov.pro/api-wordpress/functions/get_blog_count/), [`get_user_count`](https://chugunov.pro/api-wordpress/functions/get_user_count/), `wpdb::db_version`, `wpdb::tables`, [`wp_json_encode`](https://chugunov.pro/api-wordpress/functions/wp_json_encode/), [`__`](https://chugunov.pro/api-wordpress/functions/__/), [`esc_url`](https://chugunov.pro/api-wordpress/functions/esc_url/), [`esc_html`](https://chugunov.pro/api-wordpress/functions/esc_html/), [`is_multisite`](https://chugunov.pro/api-wordpress/functions/is_multisite/), [`home_url`](https://chugunov.pro/api-wordpress/functions/home_url/), [`apply_filters`](https://chugunov.pro/api-wordpress/functions/apply_filters/), [`do_action`](https://chugunov.pro/api-wordpress/functions/do_action/), [`get_site_transient`](https://chugunov.pro/api-wordpress/functions/get_site_transient/), [`get_site_option`](https://chugunov.pro/api-wordpress/functions/get_site_option/), `wpdb::get_results`, `wpdb::prepare`, [`is_wp_error`](https://chugunov.pro/api-wordpress/functions/is_wp_error/).
Используется в: `WP_Debug_Data::check_for_updates`, `WP_Automatic_Updater::run`, `Core_Upgrader::upgrade`, `WP_Upgrader::run`, [`_maybe_update_core`](https://chugunov.pro/api-wordpress/functions/_maybe_update_core/).

Оригинал в официальной документации: https://developer.wordpress.org/reference/functions/wp_version_check/
