register_setting

Регистрирует новую опцию и callback функцию (функцию обратного вызова) для обработки значения опции при её сохранении в БД.

Используется в связке с другими функциями API настроек: add_settings_field(), add_settings_section(). Они упрощают создание страницы настроек.

Функция также может использоваться для регистрации новой опции, которая будет добавлена на базовую страницу настроек WordPress (Общие, Медиафайлы, Чтение…). Опция добавляется в существующую секцию при помощи функции add_settings_field() или можно создать новую секцию функцией add_settings_section() и добавить опцию туда.

Хуки из функции:
register_setting_args
Возвращает

null. Ничего не возвращает.

Использование

register_setting( $option_group, $option_name, $sanitize_callback );
$option_group(строка) (обязательный)
Название группы, к которой будет принадлежать опция. Это название должно совпадать с названием группы в функции settings_fields().
По умолчанию: нет
$option_name(строка) (обязательный)
Название опции, которая будет сохраняться в БД.
По умолчанию: нет
$args(массив)

Данные регистрируемой опции.

sanitize_callback (строка/массив)
Название функции обратного вызова, которая будет обрабатывать значение опции перед сохранением. Важно! Функция получит один параметр – значение опции. Значение которое указанная функция вернет, будет записано в опцию.

type (строка)
Тип данных с которыми опция ассоциирована.

description (строка)
Описание данных, которые будут храниться в этой опции.

show_in_rest (логический)
Нужно ли добавлять данные этой опции в REST API.

default (разное)
Значение по умолчанию при вызове get_option().

По умолчанию: array()

Примеры

#1. Пример показывающий как нужно подключать функцию через хук admin_init:

function register_my_setting() {
	register_setting( 'my_options_group', 'my_option_name', 'intval' ); 
} 
add_action( 'admin_init', 'register_my_setting' );

#2. Другие примеры

Еще примеры смотрите в описании API опций.

Заметки

#1. Если данные проходят через функцию обработки 2 раза

Например, эта функция вернет строку с двумя восклицательными знаками:

add_theme_page( $page_title, $menu_title, $capability, $menu_slug, $function );

Код из


wp-includes/option.php

WP 4.7.2

<?php
function register_setting( $option_group, $option_name, $args = array() ) {
	global $new_whitelist_options, $wp_registered_settings;

	$defaults = array(
		'type'              => 'string',
		'group'             => $option_group,
		'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 );

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

	if ( 'misc' == $option_group ) {
		_deprecated_argument( __FUNCTION__, '3.0.0', sprintf( __( '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( __( 'The "%s" options group has been removed. Use another settings group.' ), 'privacy' ) );
		$option_group = 'reading';
	}

	$new_whitelist_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 );
	}

	$wp_registered_settings[ $option_name ] = $args;
}

Комментарии:


Оставить комментарий

Your email address will not be published. Required fields are marked *