# update_option()

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

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

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

## Сигнатура

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

## Описание

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

## Параметры

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

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

`bool`

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

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

```php
function update_option( $option, $value, $autoload = null ) {
	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 update_option( $deprecated_keys[ $option ], $value, $autoload );
	}

	wp_protect_special_option( $option );

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

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

	/**
	 * Filters a specific option before its value is (maybe) serialized and updated.
	 *
	 * The dynamic portion of the hook name, `$option`, refers to the option name.
	 *
	 * @since 2.6.0
	 * @since 4.4.0 The `$option` parameter was added.
	 *
	 * @param mixed  $value     The new, unserialized option value.
	 * @param mixed  $old_value The old option value.
	 * @param string $option    Option name.
	 */
	$value = apply_filters( "pre_update_option_{$option}", $value, $old_value, $option );

	/**
	 * Filters an option before its value is (maybe) serialized and updated.
	 *
	 * @since 3.9.0
	 *
	 * @param mixed  $value     The new, unserialized option value.
	 * @param string $option    Name of the option.
	 * @param mixed  $old_value The old option value.
	 */
	$value = apply_filters( 'pre_update_option', $value, $option, $old_value );

	/*
	 * If the new and old values are the same, no need to update.
	 *
	 * Unserialized values will be adequate in most cases. If the unserialized
	 * data differs, the (maybe) serialized data is checked to avoid
	 * unnecessary database calls for otherwise identical object instances.
	 *
	 * See https://core.trac.wordpress.org/ticket/38903
	 */
	if ( $value === $old_value || maybe_serialize( $value ) === maybe_serialize( $old_value ) ) {
		return false;
	}

	/** This filter is documented in wp-includes/option.php */
	if ( apply_filters( "default_option_{$option}", false, $option, false ) === $old_value ) {
		return add_option( $option, $value, '', $autoload );
	}

	$serialized_value = maybe_serialize( $value );

	/**
	 * Fires immediately before an option value is updated.
	 *
	 * @since 2.9.0
	 *
	 * @param string $option    Name of the option to update.
	 * @param mixed  $old_value The old option value.
	 * @param mixed  $value     The new option value.
	 */
	do_action( 'update_option', $option, $old_value, $value );

	$update_args = array(
		'option_value' => $serialized_value,
	);

	if ( null !== $autoload ) {
		$update_args['autoload'] = wp_determine_option_autoload_value( $option, $value, $serialized_value, $autoload );
	} else {
		// Retrieve the current autoload value to reevaluate it in case it was set automatically.
		$raw_autoload = $wpdb->get_var( $wpdb->prepare( "SELECT autoload FROM $wpdb->options WHERE option_name = %s LIMIT 1", $option ) );
		$allow_values = array( 'auto-on', 'auto-off', 'auto' );
		if ( in_array( $raw_autoload, $allow_values, true ) ) {
			$autoload = wp_determine_option_autoload_value( $option, $value, $serialized_value, $autoload );
			if ( $autoload !== $raw_autoload ) {
				$update_args['autoload'] = $autoload;
			}
		}
	}

	$result = $wpdb->update( $wpdb->options, $update_args, array( 'option_name' => $option ) );
	if ( ! $result ) {
		return false;
	}

	$notoptions = wp_cache_get( 'notoptions', 'options' );

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

	if ( ! wp_installing() ) {
		if ( ! isset( $update_args['autoload'] ) ) {
			// Update the cached value based on where it is currently cached.
			$alloptions = wp_load_alloptions( true );

			if ( isset( $alloptions[ $option ] ) ) {
				$alloptions[ $option ] = $serialized_value;
				wp_cache_set( 'alloptions', $alloptions, 'options' );
			} else {
				wp_cache_set( $option, $serialized_value, 'options' );
			}
		} elseif ( in_array( $update_args['autoload'], wp_autoload_values_to_autoload(), true ) ) {
			// Delete the individual cache, then set in alloptions cache.
			wp_cache_delete( $option, 'options' );

			$alloptions = wp_load_alloptions( true );

			$alloptions[ $option ] = $serialized_value;
			wp_cache_set( 'alloptions', $alloptions, 'options' );
		} else {
			// Delete the alloptions cache, then set the individual cache.
			$alloptions = wp_load_alloptions( true );

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

			wp_cache_set( $option, $serialized_value, 'options' );
		}
	}

	/**
	 * Fires after the value of a specific option has been successfully updated.
	 *
	 * The dynamic portion of the hook name, `$option`, refers to the option name.
	 *
	 * @since 2.0.1
	 * @since 4.4.0 The `$option` parameter was added.
	 *
	 * @param mixed  $old_value The old option value.
	 * @param mixed  $value     The new option value.
	 * @param string $option    Option name.
	 */
	do_action( "update_option_{$option}", $old_value, $value, $option );

	/**
	 * Fires after the value of an option has been successfully updated.
	 *
	 * @since 2.9.0
	 *
	 * @param string $option    Name of the updated option.
	 * @param mixed  $old_value The old option value.
	 * @param mixed  $value     The new option value.
	 */
	do_action( 'updated_option', $option, $old_value, $value );

	return true;
}
```

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

- 6.7.0 — The autoload values 'yes' and 'no' are deprecated.
- 4.2.0 — The $autoload parameter was added.
- 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/), [`wp_cache_delete`](https://chugunov.pro/api-wordpress/functions/wp_cache_delete/), [`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::update`, [`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/), [`update_option`](https://chugunov.pro/api-wordpress/functions/update_option/), [`get_option`](https://chugunov.pro/api-wordpress/functions/get_option/), `wpdb::get_var`, `wpdb::prepare`.
Используется в: [`_wp_connectors_rest_settings_dispatch`](https://chugunov.pro/api-wordpress/functions/_wp_connectors_rest_settings_dispatch/), `WP_Rewrite::refresh_rewrite_rules`, `WP_REST_Menus_Controller::handle_auto_add`, [`deactivated_plugins_notice`](https://chugunov.pro/api-wordpress/functions/deactivated_plugins_notice/), [`wp_update_https_detection_errors`](https://chugunov.pro/api-wordpress/functions/wp_update_https_detection_errors/), [`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/), [`_wp_batch_update_comment_type`](https://chugunov.pro/api-wordpress/functions/_wp_batch_update_comment_type/), `WP_Automatic_Updater::send_plugin_theme_email`, `WP_Recovery_Mode_Key_Service::update_keys`, `WP_Recovery_Mode_Email_Service::maybe_send_recovery_mode_email`, `WP_Paused_Extensions_Storage::set`, `WP_Paused_Extensions_Storage::delete`, `WP_Paused_Extensions_Storage::delete_all`, `WP_Privacy_Policy_Content::text_change_check`, `WP_Customize_Manager::update_stashed_theme_mod_settings`, `WP_Customize_Manager::save_changeset_post`, `WP_REST_Settings_Controller::update_item`, [`_delete_option_fresh_site`](https://chugunov.pro/api-wordpress/functions/_delete_option_fresh_site/), `WP_Upgrader::create_lock`, `WP_Customize_Setting::set_root_value`, [`update_network_option`](https://chugunov.pro/api-wordpress/functions/update_network_option/), [`wp_ajax_delete_inactive_widgets`](https://chugunov.pro/api-wordpress/functions/wp_ajax_delete_inactive_widgets/), `WP_Customize_Nav_Menu_Setting::update`, [`_wp_batch_split_terms`](https://chugunov.pro/api-wordpress/functions/_wp_batch_split_terms/), `Plugin_Upgrader::bulk_upgrade`, `Theme_Upgrader::upgrade`, `Theme_Upgrader::bulk_upgrade`, `Plugin_Upgrader::upgrade`, `WP_Plugins_List_Table::prepare_items`, [`update_option_new_admin_email`](https://chugunov.pro/api-wordpress/functions/update_option_new_admin_email/), [`update_recently_edited`](https://chugunov.pro/api-wordpress/functions/update_recently_edited/), [`populate_roles`](https://chugunov.pro/api-wordpress/functions/populate_roles/), [`populate_options`](https://chugunov.pro/api-wordpress/functions/populate_options/), [`wp_dashboard_rss_control`](https://chugunov.pro/api-wordpress/functions/wp_dashboard_rss_control/), [`wp_widget_rss_form`](https://chugunov.pro/api-wordpress/functions/wp_widget_rss_form/), [`make_site_theme`](https://chugunov.pro/api-wordpress/functions/make_site_theme/), [`maybe_disable_automattic_widgets`](https://chugunov.pro/api-wordpress/functions/maybe_disable_automattic_widgets/), [`maybe_disable_link_manager`](https://chugunov.pro/api-wordpress/functions/maybe_disable_link_manager/), [`wp_install`](https://chugunov.pro/api-wordpress/functions/wp_install/).

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