Функция является частью Settings API. Используйте эту функцию для добавления поля на страницу настроек, которое впоследствии будет выведено при помощи do_settings_sections() или do_settings_fields()
. Также эта функция задаёт HTML поля.
Важноый момент, прежде чем добавлять поле опции, вам нужно эту опцию сначала зарегистрировать функцией register_setting(). Иначе, поле выведется, но не будет сохраняться конечно же.
И конечно же, читайте мой подробный урок про создание страниц настроек.
add_settings_field( $id, $title, $callback, $page, $section = 'default', $args = array() )
name
поля, а также label_for
поля совпадают.true_
.<label>
поля.name
поля должен соответствовать параметру $option_name
функции register_setting()general
, discussion
, media
, reading
, writing
, misc
, options
или privacy
, пример.$callback
. В целом тут можно передавать любые произвольные параметры и значения, например бывает удобно передать атрибут name
, но также параметр имеет и два предопределённых значения, а именно это:
id
поля, выводимого функцией $callback
– оно добавит атрибут for
на тег <label>
<label for="">
, а это сделает заголовок поля кликабельным.<tr>
, в котором находится поле.Ниже – полностью готовый код, который вы можете вставить, надеюсь знаете куда, и у вас появится полноценное работающее поле в Настройки > Общие
, которое впоследствии вы можете получить при помощи функции get_option(), например get_option( 'true_option' );
.
add_action( 'admin_menu', 'true_add_option_to_general' ); function true_add_option_to_general(){ $option_name = 'true_option'; // Для удобства вынес в переменную register_setting( 'general', $option_name ); add_settings_field( $option_name, // ID опции 'Какая-то опция', // Заголовок 'true_option_callback', // Функция, выводящая её 'general', // Страница, где выводим 'default', // Секция настроек array( 'label_for' => $option_name, // можно оставить только label_for кстати 'name' => $option_name ) ); } function true_option_callback( $args ){ printf( '<input type="text" id="%s" name="%s" placeholder="Укажите значение..." value="%s" />', $args[ 'label_for' ], $args[ 'name' ], esc_attr( get_option( $args[ 'name' ] ) ) ); }
В результате получится вот что:
Как-то так получилось, что в описании этой и других функций Settings API мы в основном работали с текстовыми полями, но думаю, что вам невероятно интересно, как реализовать чекбокс.
Давайте рассмотрим это по шагам, на основе предыдущего примера.
В самую первую очередь мы должны решить, как мы будем сохранять значение чекбокса в базу данных, будет это yes
и no
, или 1
и 0
и так далее. Мне кстати нравится, и я буду использовать первый вариант.
Тогда нам нужно создать функцию очистки, которая будет превращать значения чекбокса в yes
и no
и указать её в параметрах register_setting().
register_setting( 'general', $option_name, array( 'sanitize_callback' => 'true_sanitize_checkbox' ) );
Затем создаём отдельно очищающую функцию:
function true_sanitize_checkbox( $value ) { return ( 'on' == $value ) ? 'yes' : 'no'; }
В чекбокс мы не должны передавать параметр label_for
, потому что он будет отмечаться по клику по тексту, который находится рядом с ним, зато можем передать произвольный параметр label_text
, который как раз-таки и будет содержать этот текст.
array( 'name' => $option_name, 'label_text' => 'Включить эту опцию' )
Осталась только функция, которая будет выводить HTML чекбокса.
function true_option_callback( $args ){ printf( '<label for="%s-id"><input type="checkbox" name="%s" id="%s-id" %s> %s</label>', $args[ 'name' ], $args[ 'name' ], $args[ 'name' ], checked( get_option( $args[ 'name' ] ), 'yes', false ), $args[ 'label_text' ] ); }
Функция checked() по сути позволяет избавиться нам от лишнего условия и вывести checked="checked"
автоматически, если два переданных в неё значения соответствуют.
А это результат:
Чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или войдите.