# add_option()

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

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

> Устаревший элемент. Помечен устаревшим с версии 6.7.0.

## Сигнатура

```php
add_option( string $option, mixed $value = '', string $deprecated = '', bool|null $autoload = null ): bool
```

## Описание

Сериализовать значения не нужно. Если значение требует сериализации, оно будет сериализовано перед вставкой в базу данных.
Помните, что ресурсы нельзя сериализовать или добавить как опцию.
Можно создавать опции без значений, а затем обновлять их значения позже.
Существующие опции не будут обновлены, при этом выполняются проверки, чтобы убедиться, что вы не добавляете защищённую опцию WordPress. Следует избегать имён опций, совпадающих с защищёнными.

## Параметры

- `$option` `string` — обязательный. Имя добавляемой опции. Ожидается, что не экранировано для SQL.
- `$value` `mixed` — необязательный, по умолчанию `''`. Значение опции. Должно быть сериализуемым, если нескалярное.
  
  Ожидается, что не экранировано для SQL.
- `$deprecated` `string` — необязательный, по умолчанию `''`. Описание. Больше не используется.
- `$autoload` `bool|null` — необязательный, по умолчанию `null`. Загружать ли опцию при запуске WordPress.
  
  Принимает логическое значение или null, чтобы оставить решение на усмотрение стандартных эвристик WordPress. Для обратной совместимости также принимаются 'yes' и 'no', хотя использование этих значений устарело.
  
  Автозагрузка слишком большого числа опций может привести к проблемам с производительностью, особенно если опции используются нечасто. Опции, к которым обращаются в нескольких местах публичной части сайта, рекомендуется автозагружать, используя true.
  
  Опции, к которым обращаются только на нескольких конкретных URL, рекомендуется не автозагружать, используя false.
  
  Значение по умолчанию — null, что означает, что WordPress сам определит значение автозагрузки.

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

`bool`

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

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

```php
function add_option( $option, $value = '', $deprecated = '', $autoload = null ) {
	global $wpdb;

	if ( ! empty( $deprecated ) ) {
		_deprecated_argument( __FUNCTION__, '2.3.0' );
	}

	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 add_option( $deprecated_keys[ $option ], $value, $deprecated, $autoload );
	}

	wp_protect_special_option( $option );

	if ( is_object( $value ) ) {
		$value = clone $value;
	}

	$value = sanitize_option( $option, $value );

	/*
	 * Make sure the option doesn't already exist.
	 * We can check the 'notoptions' cache before we ask for a DB query.
	 */
	$notoptions = wp_cache_get( 'notoptions', 'options' );

	if ( ! is_array( $notoptions ) || ! isset( $notoptions[ $option ] ) ) {
		/** This filter is documented in wp-includes/option.php */
		if ( apply_filters( "default_option_{$option}", false, $option, false ) !== get_option( $option ) ) {
			return false;
		}
	}

	$serialized_value = maybe_serialize( $value );

	$autoload = wp_determine_option_autoload_value( $option, $value, $serialized_value, $autoload );

	/**
	 * Fires before an option is added.
	 *
	 * @since 2.9.0
	 *
	 * @param string $option Name of the option to add.
	 * @param mixed  $value  Value of the option.
	 */
	do_action( 'add_option', $option, $value );

	$result = $wpdb->query( $wpdb->prepare( "INSERT INTO `$wpdb->options` (`option_name`, `option_value`, `autoload`) VALUES (%s, %s, %s) ON DUPLICATE KEY UPDATE `option_name` = VALUES(`option_name`), `option_value` = VALUES(`option_value`), `autoload` = VALUES(`autoload`)", $option, $serialized_value, $autoload ) );
	if ( ! $result ) {
		return false;
	}

	if ( ! wp_installing() ) {
		if ( in_array( $autoload, wp_autoload_values_to_autoload(), true ) ) {
			$alloptions            = wp_load_alloptions( true );
			$alloptions[ $option ] = $serialized_value;
			wp_cache_set( 'alloptions', $alloptions, 'options' );
		} else {
			wp_cache_set( $option, $serialized_value, 'options' );
		}
	}

	// This option exists now.
	$notoptions = wp_cache_get( 'notoptions', 'options' ); // Yes, again... we need it to be fresh.

	if ( is_array( $notoptions ) && isset( $notoptions[ $option ] ) ) {
		unset( $notoptions[ $option ] );
		wp_cache_set( 'notoptions', $notoptions, 'options' );
	}

	/**
	 * Fires after a specific option has been added.
	 *
	 * The dynamic portion of the hook name, `$option`, refers to the option name.
	 *
	 * @since 2.5.0 As `add_option_{$name}`
	 * @since 3.0.0
	 *
	 * @param string $option Name of the option to add.
	 * @param mixed  $value  Value of the option.
	 */
	do_action( "add_option_{$option}", $option, $value );

	/**
	 * Fires after an option has been added.
	 *
	 * @since 2.9.0
	 *
	 * @param string $option Name of the added option.
	 * @param mixed  $value  Value of the option.
	 */
	do_action( 'added_option', $option, $value );

	return true;
}
```

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

- 6.7.0 — The autoload values 'yes' and 'no' are deprecated.
- 6.6.0 — The $autoload parameter’s default value was changed to null.
- 1.0.0 — Introduced.

## Связанные

Использует: [`wp_autoload_values_to_autoload`](https://chugunov.pro/api-wordpress/functions/wp_autoload_values_to_autoload/), [`wp_determine_option_autoload_value`](https://chugunov.pro/api-wordpress/functions/wp_determine_option_autoload_value/), [`wp_installing`](https://chugunov.pro/api-wordpress/functions/wp_installing/), [`wp_cache_set`](https://chugunov.pro/api-wordpress/functions/wp_cache_set/), [`sanitize_option`](https://chugunov.pro/api-wordpress/functions/sanitize_option/), [`maybe_serialize`](https://chugunov.pro/api-wordpress/functions/maybe_serialize/), [`add_option`](https://chugunov.pro/api-wordpress/functions/add_option/), [`wp_load_alloptions`](https://chugunov.pro/api-wordpress/functions/wp_load_alloptions/), [`wp_protect_special_option`](https://chugunov.pro/api-wordpress/functions/wp_protect_special_option/), `wpdb::query`, [`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/), [`do_action`](https://chugunov.pro/api-wordpress/functions/do_action/), [`get_option`](https://chugunov.pro/api-wordpress/functions/get_option/), `wpdb::prepare`.
Используется в: [`add_network_option`](https://chugunov.pro/api-wordpress/functions/add_network_option/), [`switch_theme`](https://chugunov.pro/api-wordpress/functions/switch_theme/), [`set_transient`](https://chugunov.pro/api-wordpress/functions/set_transient/), [`update_option`](https://chugunov.pro/api-wordpress/functions/update_option/), [`add_option`](https://chugunov.pro/api-wordpress/functions/add_option/), [`add_blog_option`](https://chugunov.pro/api-wordpress/functions/add_blog_option/).

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