# register_setting()

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

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

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

## Сигнатура

```php
register_setting( string $option_group, string $option_name, array $args = array() )
```

## Описание

Регистрирует настройку и её данные.

## Параметры

- `$option_group` `string` — обязательный. Имя группы настроек. Должно соответствовать имени ключа разрешённой опции.
  
  Имена ключей разрешённых опций по умолчанию включают 'general', 'discussion', 'media', 'reading', 'writing' и 'options'.
- `$option_name` `string` — обязательный. Имя опции, которую нужно очистить и сохранить.
- `$args` `array` — необязательный, по умолчанию `array()`. Данные, описывающие настройку при регистрации.
  
  type stringТип данных, связанных с этой настройкой.
  
  Допустимые значения — 'string', 'boolean', 'integer', 'number', 'array' и 'object'.
  
  label stringМетка данных, привязанных к этой настройке.
  
  description stringОписание данных, привязанных к этой настройке.
  
  sanitize_callback callableФункция обратного вызова, очищающая значение опции.
  
  show_in_rest bool|arrayНужно ли включать данные, связанные с этой настройкой, в REST API.
  
  При регистрации сложных настроек этот аргумент при необходимости может быть массивом с ключом 'schema'.
  
  default mixedЗначение по умолчанию при вызове get_option().

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

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

```php
function register_setting( $option_group, $option_name, $args = array() ) {
	global $new_allowed_options, $wp_registered_settings;

	/*
	 * In 5.5.0, the `$new_whitelist_options` global variable was renamed to `$new_allowed_options`.
	 * Please consider writing more inclusive code.
	 */
	$GLOBALS['new_whitelist_options'] = &$new_allowed_options;

	$defaults = array(
		'type'              => 'string',
		'group'             => $option_group,
		'label'             => '',
		'description'       => '',
		'sanitize_callback' => null,
		'show_in_rest'      => false,
	);

	// Back-compat: old sanitize callback is added.
	if ( is_callable( $args ) ) {
		$args = array(
			'sanitize_callback' => $args,
		);
	}

	/**
	 * Filters the registration arguments when registering a setting.
	 *
	 * @since 4.7.0
	 *
	 * @param array  $args         Array of setting registration arguments.
	 * @param array  $defaults     Array of default arguments.
	 * @param string $option_group Setting group.
	 * @param string $option_name  Setting name.
	 */
	$args = apply_filters( 'register_setting_args', $args, $defaults, $option_group, $option_name );

	$args = wp_parse_args( $args, $defaults );

	// Require an item schema when registering settings with an array type.
	if ( false !== $args['show_in_rest'] && 'array' === $args['type'] && ( ! is_array( $args['show_in_rest'] ) || ! isset( $args['show_in_rest']['schema']['items'] ) ) ) {
		_doing_it_wrong( __FUNCTION__, __( 'When registering an "array" setting to show in the REST API, you must specify the schema for each array item in "show_in_rest.schema.items".' ), '5.4.0' );
	}

	if ( ! is_array( $wp_registered_settings ) ) {
		$wp_registered_settings = array();
	}

	if ( 'misc' === $option_group ) {
		_deprecated_argument(
			__FUNCTION__,
			'3.0.0',
			sprintf(
				/* translators: %s: misc */
				__( 'The "%s" options group has been removed. Use another settings group.' ),
				'misc'
			)
		);
		$option_group = 'general';
	}

	if ( 'privacy' === $option_group ) {
		_deprecated_argument(
			__FUNCTION__,
			'3.5.0',
			sprintf(
				/* translators: %s: privacy */
				__( 'The "%s" options group has been removed. Use another settings group.' ),
				'privacy'
			)
		);
		$option_group = 'reading';
	}

	$new_allowed_options[ $option_group ][] = $option_name;

	if ( ! empty( $args['sanitize_callback'] ) ) {
		add_filter( "sanitize_option_{$option_name}", $args['sanitize_callback'] );
	}
	if ( array_key_exists( 'default', $args ) ) {
		add_filter( "default_option_{$option_name}", 'filter_default_option', 10, 3 );
	}

	/**
	 * Fires immediately before the setting is registered but after its filters are in place.
	 *
	 * @since 5.5.0
	 *
	 * @param string $option_group Setting group.
	 * @param string $option_name  Setting name.
	 * @param array  $args         Array of setting registration arguments.
	 */
	do_action( 'register_setting', $option_group, $option_name, $args );

	$wp_registered_settings[ $option_name ] = $args;
}
```

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

- 6.6.0 — Added the label argument.
- 5.5.0 — $new_whitelist_options was renamed to $new_allowed_options. Please consider writing more inclusive code.
- 4.7.0 — $args can be passed to set flags on the setting, similar to register_meta().
- 3.5.0 — The privacy option group was deprecated.
- 3.0.0 — The misc option group was deprecated.
- 2.7.0 — Introduced.

## Связанные

Использует: [`__`](https://chugunov.pro/api-wordpress/functions/__/), [`_doing_it_wrong`](https://chugunov.pro/api-wordpress/functions/_doing_it_wrong/), [`_deprecated_argument`](https://chugunov.pro/api-wordpress/functions/_deprecated_argument/), [`wp_parse_args`](https://chugunov.pro/api-wordpress/functions/wp_parse_args/), [`apply_filters`](https://chugunov.pro/api-wordpress/functions/apply_filters/), [`add_filter`](https://chugunov.pro/api-wordpress/functions/add_filter/), [`do_action`](https://chugunov.pro/api-wordpress/functions/do_action/).
Используется в: [`_wp_register_default_connector_settings`](https://chugunov.pro/api-wordpress/functions/_wp_register_default_connector_settings/), [`register_initial_settings`](https://chugunov.pro/api-wordpress/functions/register_initial_settings/), [`add_option_update_handler`](https://chugunov.pro/api-wordpress/functions/add_option_update_handler/).

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