# get_option()

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

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

## Сигнатура

```php
get_option( string $option, mixed $default_value = false ): mixed
```

## Описание

Если опция не существует и значение по умолчанию не указано, возвращается логическое false. Это можно использовать, чтобы проверить, нужно ли инициализировать опцию при установке плагина, однако лучше сделать это с помощью add_option(), которая не перезаписывает существующие опции.
Не инициализировать опцию и использовать логическое false как возвращаемое значение — плохая практика, так как это вызывает дополнительный запрос к базе данных.
Тип возвращаемого значения может отличаться от типа, переданного при сохранении или обновлении опции. Если значение опции было сериализовано, то при возврате оно будет десериализовано. В этом случае тип останется прежним. Например, при хранении нескалярного значения, такого как массив, будет возвращён тот же массив.
В большинстве случаев нестроковые скалярные значения и null преобразуются и возвращаются как строковые эквиваленты.
Исключения:
Если опция не была сохранена в базе данных, возвращается значение $default_value, если оно указано. Если нет, возвращается логическое false.
Если используется один из фильтров Options API: 'pre_option_$option', 'default_option_$option' или 'option_$option', возвращаемое значение может не соответствовать ожидаемому типу.
Если опция только что была сохранена в базе данных и сразу после этого используется get_option(), нестроковые скалярные значения и null не преобразуются в строковые эквиваленты и возвращается исходный тип.
Примеры:
При добавлении опций так: add_option( 'my_option_name', 'value' ) и последующем их извлечении через get_option( 'my_option_name' ) возвращаемые значения будут:
false возвращает string(0) ""
true возвращает string(1) "1"
0 возвращает string(1) "0"
1 возвращает string(1) "1"
'0' возвращает string(1) "0"
'1' возвращает string(1) "1"
null возвращает string(0) ""
При добавлении опций с нескалярными значениями, например add_option( 'my_array', array( false, 'str', null ) ), возвращаемое значение будет идентично исходному, так как оно сериализуется перед сохранением в базе данных:
array(3) {
[0] => bool(false)
[1] => string(3) "str"
[2] => NULL
}

## Параметры

- `$option` `string` — обязательный. Имя извлекаемой опции. Ожидается, что не экранировано для SQL.
- `$default_value` `mixed` — необязательный, по умолчанию `false`. Значение по умолчанию, возвращаемое, если опция не существует.

## Возвращаемое значение

`mixed` — false

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

Файл: `wp-includes/option.php:78`

```php
function get_option( $option, $default_value = false ) {
	global $wpdb;

	if ( is_scalar( $option ) ) {
		$option = trim( $option );
	}

	if ( empty( $option ) ) {
		return false;
	}

	/*
	 * Until a proper _deprecated_option() function can be introduced,
	 * redirect requests to deprecated keys to the new, correct ones.
	 */
	$deprecated_keys = array(
		'blacklist_keys'    => 'disallowed_keys',
		'comment_whitelist' => 'comment_previously_approved',
	);

	if ( isset( $deprecated_keys[ $option ] ) && ! wp_installing() ) {
		_deprecated_argument(
			__FUNCTION__,
			'5.5.0',
			sprintf(
				/* translators: 1: Deprecated option key, 2: New option key. */
				__( 'The "%1$s" option key has been renamed to "%2$s".' ),
				$option,
				$deprecated_keys[ $option ]
			)
		);
		return get_option( $deprecated_keys[ $option ], $default_value );
	}

	/**
	 * Filters the value of an existing option before it is retrieved.
	 *
	 * The dynamic portion of the hook name, `$option`, refers to the option name.
	 *
	 * Returning a value other than false from the filter will short-circuit retrieval
	 * and return that value instead.
	 *
	 * @since 1.5.0
	 * @since 4.4.0 The `$option` parameter was added.
	 * @since 4.9.0 The `$default_value` parameter was added.
	 *
	 * @param mixed  $pre_option    The value to return instead of the option value. This differs from
	 *                              `$default_value`, which is used as the fallback value in the event
	 *                              the option doesn't exist elsewhere in get_option().
	 *                              Default false (to skip past the short-circuit).
	 * @param string $option        Option name.
	 * @param mixed  $default_value The fallback value to return if the option does not exist.
	 *                              Default false.
	 */
	$pre = apply_filters( "pre_option_{$option}", false, $option, $default_value );

	/**
	 * Filters the value of any existing option before it is retrieved.
	 *
	 * Returning a value other than false from the filter will short-circuit retrieval
	 * and return that value instead.
	 *
	 * @since 6.1.0
	 *
	 * @param mixed  $pre_option    The value to return instead of the option value. This differs from
	 *                              `$default_value`, which is used as the fallback value in the event
	 *                              the option doesn't exist elsewhere in get_option().
	 *                              Default false (to skip past the short-circuit).
	 * @param string $option        Name of the option.
	 * @param mixed  $default_value The fallback value to return if the option does not exist.
	 *                              Default false.
	 */
	$pre = apply_filters( 'pre_option', $pre, $option, $default_value );

	if ( false !== $pre ) {
		return $pre;
	}

	if ( defined( 'WP_SETUP_CONFIG' ) ) {
		return false;
	}

	// Distinguish between `false` as a default, and not passing one.
	$passed_default = func_num_args() > 1;

	if ( ! wp_installing() ) {
		$alloptions = wp_load_alloptions();
		/*
		 * When getting an option value, we check in the following order for performance:
		 *
		 * 1. Check the 'alloptions' cache first to prioritize existing loaded options.
		 * 2. Check the 'notoptions' cache before a cache lookup or DB hit.
		 * 3. Check the 'options' cache prior to a DB hit.
		 * 4. Check the DB for the option and cache it in either the 'options' or 'notoptions' cache.
		 */
		if ( isset( $alloptions[ $option ] ) ) {
			$value = $alloptions[ $option ];
		} else {
			// Check for non-existent options first to avoid unnecessary object cache lookups and DB hits.
			$notoptions = wp_cache_get( 'notoptions', 'options' );

			if ( ! is_array( $notoptions ) ) {
				$notoptions = array();
				wp_cache_set( 'notoptions', $notoptions, 'options' );
			}

			if ( isset( $notoptions[ $option ] ) ) {
				/**
				 * Filters the default value for an option.
				 *
				 * The dynamic portion of the hook name, `$option`, refers to the option name.
				 *
				 * @since 3.4.0
				 * @since 4.4.0 The `$option` parameter was added.
				 * @since 4.7.0 The `$passed_default` parameter was added to distinguish between a `false` value and the default parameter value.
				 *
				 * @param mixed  $default_value  The default value to return if the option does not exist
				 *                               in the database.
				 * @param string $option         Option name.
				 * @param bool   $passed_default Was `get_option()` passed a default value?
				 */
				return apply_filters( "default_option_{$option}", $default_value, $option, $passed_default );
			}

			$value = wp_cache_get( $option, 'options' );

			if ( false === $value ) {

				$row = $wpdb->get_row( $wpdb->prepare( "SELECT option_value FROM $wpdb->options WHERE option_name = %s LIMIT 1", $option ) );

				// Has to be get_row() instead of get_var() because of funkiness with 0, false, null values.
				if ( is_object( $row ) ) {
					$value = $row->option_value;
					wp_cache_add( $option, $value, 'options' );
				} else { // Option does not exist, so we must cache its non-existence.
					$notoptions[ $option ] = true;
					wp_cache_set( 'notoptions', $notoptions, 'options' );

					/** This filter is documented in wp-includes/option.php */
					return apply_filters( "default_option_{$option}", $default_value, $option, $passed_default );
				}
			}
		}
	} else {
		$suppress = $wpdb->suppress_errors();
		$row      = $wpdb->get_row( $wpdb->prepare( "SELECT option_value FROM $wpdb->options WHERE option_name = %s LIMIT 1", $option ) );
		$wpdb->suppress_errors( $suppress );

		if ( is_object( $row ) ) {
			$value = $row->option_value;
		} else {
			/** This filter is documented in wp-includes/option.php */
			return apply_filters( "default_option_{$option}", $default_value, $option, $passed_default );
		}
	}

	// If home is not set, use siteurl.
	if ( 'home' === $option && '' === $value ) {
		return get_option( 'siteurl' );
	}

	if ( in_array( $option, array( 'siteurl', 'home', 'category_base', 'tag_base' ), true ) ) {
		$value = untrailingslashit( $value );
	}

	/**
	 * Filters the value of an existing option.
	 *
	 * The dynamic portion of the hook name, `$option`, refers to the option name.
	 *
	 * @since 1.5.0 As `option_{$setting}`.
	 * @since 3.0.0
	 * @since 4.4.0 The `$option` parameter was added.
	 *
	 * @param mixed  $value  Value of the option. If stored serialized, it will be
	 *                       unserialized prior to being returned.
	 * @param string $option Option name.
	 */
	return apply_filters( "option_{$option}", maybe_unserialize( $value ), $option );
}
```

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

- 1.5.0 — Introduced.

## Связанные

Использует: [`wp_installing`](https://chugunov.pro/api-wordpress/functions/wp_installing/), [`wp_cache_set`](https://chugunov.pro/api-wordpress/functions/wp_cache_set/), [`wp_cache_add`](https://chugunov.pro/api-wordpress/functions/wp_cache_add/), [`untrailingslashit`](https://chugunov.pro/api-wordpress/functions/untrailingslashit/), [`maybe_unserialize`](https://chugunov.pro/api-wordpress/functions/maybe_unserialize/), [`wp_load_alloptions`](https://chugunov.pro/api-wordpress/functions/wp_load_alloptions/), `wpdb::get_row`, `wpdb::suppress_errors`, [`wp_cache_get`](https://chugunov.pro/api-wordpress/functions/wp_cache_get/), [`__`](https://chugunov.pro/api-wordpress/functions/__/), [`_deprecated_argument`](https://chugunov.pro/api-wordpress/functions/_deprecated_argument/), [`apply_filters`](https://chugunov.pro/api-wordpress/functions/apply_filters/), [`get_option`](https://chugunov.pro/api-wordpress/functions/get_option/), `wpdb::prepare`.
Используется в: [`_wp_connectors_pass_default_keys_to_ai_client`](https://chugunov.pro/api-wordpress/functions/_wp_connectors_pass_default_keys_to_ai_client/), [`_wp_connectors_get_api_key_source`](https://chugunov.pro/api-wordpress/functions/_wp_connectors_get_api_key_source/), [`wp_is_collaboration_enabled`](https://chugunov.pro/api-wordpress/functions/wp_is_collaboration_enabled/), `WP_Site_Health::get_test_insecure_registration`, `WP_Debug_Data::get_wp_core`, `WP_Site_Health::get_test_search_engine_visibility`, [`wp_get_speculation_rules_configuration`](https://chugunov.pro/api-wordpress/functions/wp_get_speculation_rules_configuration/), [`wp_get_speculation_rules`](https://chugunov.pro/api-wordpress/functions/wp_get_speculation_rules/), [`is_utf8_charset`](https://chugunov.pro/api-wordpress/functions/is_utf8_charset/), [`wp_get_plugin_action_button`](https://chugunov.pro/api-wordpress/functions/wp_get_plugin_action_button/), [`get_options`](https://chugunov.pro/api-wordpress/functions/get_options/), [`wp_delete_all_temp_backups`](https://chugunov.pro/api-wordpress/functions/wp_delete_all_temp_backups/), `IXR_Server::output`, [`_resolve_home_block_template`](https://chugunov.pro/api-wordpress/functions/_resolve_home_block_template/), [`build_comment_query_vars_from_block`](https://chugunov.pro/api-wordpress/functions/build_comment_query_vars_from_block/), `WP_REST_Server::add_site_icon_to_index`, `WP_REST_Menus_Controller::get_menu_auto_add`, `WP_REST_Menus_Controller::handle_auto_add`, [`get_block_editor_settings`](https://chugunov.pro/api-wordpress/functions/get_block_editor_settings/), [`get_default_block_editor_settings`](https://chugunov.pro/api-wordpress/functions/get_default_block_editor_settings/), [`build_query_vars_from_query_block`](https://chugunov.pro/api-wordpress/functions/build_query_vars_from_query_block/), `WP_Query`, [`deactivated_plugins_notice`](https://chugunov.pro/api-wordpress/functions/deactivated_plugins_notice/), [`wp_robots_noindex`](https://chugunov.pro/api-wordpress/functions/wp_robots_noindex/), [`wp_robots_no_robots`](https://chugunov.pro/api-wordpress/functions/wp_robots_no_robots/), [`wp_robots_max_image_preview_large`](https://chugunov.pro/api-wordpress/functions/wp_robots_max_image_preview_large/), [`wp_is_site_url_using_https`](https://chugunov.pro/api-wordpress/functions/wp_is_site_url_using_https/), [`wp_should_replace_insecure_home_url`](https://chugunov.pro/api-wordpress/functions/wp_should_replace_insecure_home_url/), [`wp_update_urls_to_https`](https://chugunov.pro/api-wordpress/functions/wp_update_urls_to_https/), [`wp_update_https_migration_required`](https://chugunov.pro/api-wordpress/functions/wp_update_https_migration_required/), [`get_media_states`](https://chugunov.pro/api-wordpress/functions/get_media_states/), [`_wp_batch_update_comment_type`](https://chugunov.pro/api-wordpress/functions/_wp_batch_update_comment_type/), [`wp_check_comment_disallowed_list`](https://chugunov.pro/api-wordpress/functions/wp_check_comment_disallowed_list/), `WP_Sitemaps::sitemaps_enabled`, `WP_Sitemaps_Posts::get_url_list`, `WP_Sitemaps_Posts::get_max_num_pages`, `WP_Automatic_Updater::send_plugin_theme_email`, [`wp_timezone_string`](https://chugunov.pro/api-wordpress/functions/wp_timezone_string/), [`wp_get_registered_image_subsizes`](https://chugunov.pro/api-wordpress/functions/wp_get_registered_image_subsizes/), [`get_post_states`](https://chugunov.pro/api-wordpress/functions/get_post_states/).

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