Функция регистрирует опцию, которую впоследствии можно вывести на страницах настроек при помощи функции add_settings_field().
По сути помогает предопределить поведение опции, например задав функцию для очистки значений и значение по умолчанию.
register_setting( $option_group, $option_name, $args = array() )
general
, discussion
, media
, reading
, writing
, misc
, options
или privacy
, пример.wp_options
.absint
, если значения нашей опции только неотрицательные целые числа и мы хотим использовать стандартную функцию WordPress absint() для их очистки.false
.string
, boolean
, integer
, number
, array
или object
.show_in_rest
установлено в значение false
, то и этот параметр использовать не нужно! Потому что он используется только REST API для определения схемы данных и проведения соответствующей очистки.boolean
и создать текстовое поле под неё – значение прекрасно сохранится в базу данных в виде строки, но со стороны REST API конечно же возникнут вопросики.show_in_rest
установлено в значение false
или не задано вовсе, то и этот параметр можно смело скипать.Основы основ, которые важно знать при использовании register_setting()
– это то, что она должна использоваться внутри хука admin_init
и в совокупности с функцией add_settings_field() и её второй параметр $option_name
должен совпадать с первым параметром функции add_settings_field(). И параметр $option_group
у обоих функций также должен совпадать.
add_action( 'admin_init', 'true_simple_setting' ); function true_simple_setting() { // специально вынес эти два параметра в отдельные переменные, чтобы вам было понятно $option_name = 'true_option'; $option_group = 'true_option_group'; add_settings_section( 'true_section', 'Заголовок секции', '', $option_group ); register_setting( $option_group, $option_name, array( 'sanitize_callback' => 'absint' ) ); add_settings_field( $option_name, 'Заголовок поля', 'field_callback', $option_group, 'true_section', array( 'name' => $option_name ) ); } // вывод HTML поля function field_callback( $args ) { printf( '<input type="number" min="0" name="%s" value="%d" />', esc_attr( $args[ 'name' ] ), get_option( $args[ 'name' ] ) ); }
Добавлю ещё пару слов в отношении очистки, чтобы вам было понятно на 100%. На 20-й строчке вы можете заметить, что мы использовали поле <input type="number">
со значением атрибута min равным 0, что автоматически подразумевает, что все значения опции – неотрицательные целые числа, а это значит, что идеальная функция очистки для нас – это стандартная функция WordPress absint(), которую я и указал на 11-й строчке.
И небольшое дополнение, что если вы планируете использовать вашу опцию в REST API, то помимо хука admin_init
вам ещё понадобится rest_api_init
.
add_action( 'admin_init', 'true_simple_setting' ); add_action( 'rest_api_init', 'true_simple_setting' );
Пока что мы только очищали неотрицательные целые числа – что может быть скучнее. Предлагаю сделать кое-что поинтереснее. Добавим поле с лицензионным ключом со значением ЛицензионныйКлюч123
, которое в админке будет отображаться как *****зионныйКлюч123
. Безусловно, тут придётся поработать не только с опцией очистки, но и с колбэк-функцией вывода поля.
Итак, шаг 1, при регистрации опции мы указываем произвольную функцию очистки.
register_setting( 'true_settings', 'license_key', array( 'sanitize_callback' => 'true_sanitize_license' ) );
Шаг 2, напишем функцию очистки лицензионного ключа.
function true_sanitize_license( $value ) { // если значение лицензионного ключа начинается с 5 звёздочек if( "*****" === substr( $value, 0, 5 ) ) { // получаем и возвращаем текущее значение из базы данных $value = get_option( 'license_key' ); } else { // очищаем как обычную строку $value = sanitize_text_field( $value ); } return $valie }
И шаг 3, нужно учесть это при выводе поля.
function field_callback( $args ) { if( $value = get_option( $args[ 'name' ] ) ) { $value = '*****' . substr( $value, 5 ); } printf( '<input type="text" name="%s" value="%s" />', esc_attr( $args[ 'name' ] ), $value ); }
Да, в этой функции есть один фильтр и один экшен-хук. Сейчас мы о них поговорим. Про хуки кстати у меня есть отдельное руководство.
$args = apply_filters( 'register_setting_args', $args, $defaults, $option_group, $option_name );
Данный хук позволяет модифицировать параметры $args
, про которые мы говорили выше. Например мы легко можем изменить значение по умолчанию на другое, если оно равно какому-то определённому.
add_filter( 'register_setting_args', 'true_modify_defaults', 25, 4); function true_modify_defaults( $args, $defaults, $option_group, $option_name ) { if( 'привет' === $args[ 'default' ] && 'true_option' === $option_name ) { $args[ 'default' ] = 'пока'; } return $args; }
do_action( 'register_setting', $option_group, $option_name, $args );
Позволяет выполнить какие-то действия прямо непосредственно перед регистрацией опции. Параметры этого хука совпадают с параметрами функции.
Чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или войдите.