# wp_set_option_autoload_values()

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

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

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

## Сигнатура

```php
wp_set_option_autoload_values( array $options ): array
```

## Описание

Автозагрузка слишком большого числа опций может привести к проблемам с производительностью, особенно если опции используются нечасто.
Эта функция позволяет изменить значение автозагрузки сразу для нескольких опций, не меняя само значение опции.
Например, это рекомендуется делать в хуках активации и деактивации плагина, чтобы опции, используемые исключительно этим плагином и обычно загружаемые автоматически, не загружались, пока плагин неактивен.

## Параметры

- `$options` `array` — обязательный. Ассоциативный массив имён опций и устанавливаемых для них значений автозагрузки. Предполагается, что имена опций не экранированы для SQL. Значения автозагрузки должны быть логическими. Для обратной совместимости также принимаются 'yes' и 'no', однако их использование устарело.

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

`array`

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

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

```php
function wp_set_option_autoload_values( array $options ) {
	global $wpdb;

	if ( ! $options ) {
		return array();
	}

	$grouped_options = array(
		'on'  => array(),
		'off' => array(),
	);
	$results         = array();
	foreach ( $options as $option => $autoload ) {
		wp_protect_special_option( $option ); // Ensure only valid options can be passed.

		/*
		 * Sanitize autoload value and categorize accordingly.
		 * The values 'yes', 'no', 'on', and 'off' are supported for backward compatibility.
		 */
		if ( 'off' === $autoload || 'no' === $autoload || false === $autoload ) {
			$grouped_options['off'][] = $option;
		} else {
			$grouped_options['on'][] = $option;
		}
		$results[ $option ] = false; // Initialize result value.
	}

	$where      = array();
	$where_args = array();
	foreach ( $grouped_options as $autoload => $options ) {
		if ( ! $options ) {
			continue;
		}
		$placeholders = implode( ',', array_fill( 0, count( $options ), '%s' ) );
		$where[]      = "autoload != '%s' AND option_name IN ($placeholders)";
		$where_args[] = $autoload;
		foreach ( $options as $option ) {
			$where_args[] = $option;
		}
	}
	$where = 'WHERE ' . implode( ' OR ', $where );

	/*
	 * Determine the relevant options that do not already use the given autoload value.
	 * If no options are returned, no need to update.
	 */
	// phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared,WordPress.DB.PreparedSQLPlaceholders.UnfinishedPrepare
	$options_to_update = $wpdb->get_col( $wpdb->prepare( "SELECT option_name FROM $wpdb->options $where", $where_args ) );
	if ( ! $options_to_update ) {
		return $results;
	}

	// Run UPDATE queries as needed (maximum 2) to update the relevant options' autoload values to 'yes' or 'no'.
	foreach ( $grouped_options as $autoload => $options ) {
		if ( ! $options ) {
			continue;
		}
		$options                      = array_intersect( $options, $options_to_update );
		$grouped_options[ $autoload ] = $options;
		if ( ! $grouped_options[ $autoload ] ) {
			continue;
		}

		// Run query to update autoload value for all the options where it is needed.
		$success = $wpdb->query(
			$wpdb->prepare(
				"UPDATE $wpdb->options SET autoload = %s WHERE option_name IN (" . implode( ',', array_fill( 0, count( $grouped_options[ $autoload ] ), '%s' ) ) . ')',
				array_merge(
					array( $autoload ),
					$grouped_options[ $autoload ]
				)
			)
		);
		if ( ! $success ) {
			// Set option list to an empty array to indicate no options were updated.
			$grouped_options[ $autoload ] = array();
			continue;
		}

		// Assume that on success all options were updated, which should be the case given only new values are sent.
		foreach ( $grouped_options[ $autoload ] as $option ) {
			$results[ $option ] = true;
		}
	}

	/*
	 * If any options were changed to 'on', delete their individual caches, and delete 'alloptions' cache so that it
	 * is refreshed as needed.
	 * If no options were changed to 'on' but any options were changed to 'no', delete them from the 'alloptions'
	 * cache. This is not necessary when options were changed to 'on', since in that situation the entire cache is
	 * deleted anyway.
	 */
	if ( $grouped_options['on'] ) {
		wp_cache_delete_multiple( $grouped_options['on'], 'options' );
		wp_cache_delete( 'alloptions', 'options' );
	} elseif ( $grouped_options['off'] ) {
		$alloptions = wp_load_alloptions( true );

		foreach ( $grouped_options['off'] as $option ) {
			if ( isset( $alloptions[ $option ] ) ) {
				unset( $alloptions[ $option ] );
			}
		}

		wp_cache_set( 'alloptions', $alloptions, 'options' );
	}

	return $results;
}
```

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

- 6.7.0 — The autoload values 'yes' and 'no' are deprecated.
- 6.4.0 — Introduced.

## Связанные

Использует: [`wp_cache_delete_multiple`](https://chugunov.pro/api-wordpress/functions/wp_cache_delete_multiple/), [`wp_cache_delete`](https://chugunov.pro/api-wordpress/functions/wp_cache_delete/), [`wp_cache_set`](https://chugunov.pro/api-wordpress/functions/wp_cache_set/), [`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::get_col`, `wpdb::query`, `wpdb::prepare`.
Используется в: [`wp_set_options_autoload`](https://chugunov.pro/api-wordpress/functions/wp_set_options_autoload/), [`wp_set_option_autoload`](https://chugunov.pro/api-wordpress/functions/wp_set_option_autoload/), [`switch_theme`](https://chugunov.pro/api-wordpress/functions/switch_theme/).

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