Введение в создание настроек в админ панели WordPress
Если вы разрабатываете тему или плагин для WordPress, часто возникает задача добавить собственные настройки в админ панель. Это позволяет пользователям гибко управлять функционалом без правки кода. В этой статье мы подробно разберем, как создать настройки с помощью стандартного API WordPress, как сохранить данные и вывести их в интерфейсе.
Мы рассмотрим создание страницы настроек, регистрацию опций, добавление полей и валидацию данных. Все примеры будут с префиксом функций wp1_, чтобы не конфликтовать с другими функциями.
Регистрация страницы настроек и опций
Первым шагом создадим новую страницу в меню администратора и зарегистрируем опцию для хранения настроек.
Используем хук admin_menu для добавления страницы и admin_init для регистрации опций.
function wp1_add_settings_page() {
add_options_page(
'Настройки WP-1',
'Настройки WP-1',
'manage_options',
'wp1-settings',
'wp1_render_settings_page'
);
}
add_action('admin_menu', 'wp1_add_settings_page');
function wp1_register_settings() {
register_setting('wp1_settings_group', 'wp1_option_text', array('sanitize_callback' => 'wp1_sanitize_text'));
}
add_action('admin_init', 'wp1_register_settings');
function wp1_sanitize_text($input) {
return sanitize_text_field($input);
}Здесь мы создаем страницу в разделе «Настройки» с идентификатором wp1-settings. Опция wp1_option_text регистрируется с функцией валидации.
Вывод формы настроек на странице
Теперь создадим функцию wp1_render_settings_page, которая выведет HTML форму для ввода значения опции.
function wp1_render_settings_page() {
?>
<div class="wrap">
<h1>Настройки WP-1</h1>
<form method="post" action="options.php">
<?php
settings_fields('wp1_settings_group');
do_settings_sections('wp1-settings');
?>
<table class="form-table">
<tr valign="top">
<th scope="row">Текстовая опция</th>
<td><input type="text" name="wp1_option_text" value="<?php echo esc_attr(get_option('wp1_option_text')); ?>" /></td>
</tr>
</table>
<?php submit_button(); ?>
</form>
</div>
<?php
}Вызовы settings_fields и do_settings_sections необходимы для безопасности и вывода секций (если добавите).
Добавление секций и полей настроек
Для более сложных настроек можно создавать секции и поля с помощью функций add_settings_section и add_settings_field. Это позволяет структурировать форму и добавлять пояснения.
function wp1_settings_init() {
add_settings_section(
'wp1_section_main',
'Основные настройки',
'wp1_section_main_cb',
'wp1-settings'
);
add_settings_field(
'wp1_option_text',
'Текстовое поле',
'wp1_option_text_cb',
'wp1-settings',
'wp1_section_main'
);
}
add_action('admin_init', 'wp1_settings_init');
function wp1_section_main_cb() {
echo '<p>Здесь вы можете изменить основные параметры плагина WP-1.</p>';
}
function wp1_option_text_cb() {
$value = get_option('wp1_option_text', '');
echo '<input type="text" id="wp1_option_text" name="wp1_option_text" value="' . esc_attr($value) . '" />';
}Теперь при открытии страницы настройки появится секция с описанием и поле ввода.
Валидация и сохранение данных
В функции wp1_sanitize_text мы используем sanitize_text_field для очистки входящих данных. Это важно, чтобы избежать XSS-уязвимостей и сохранить в базе валидные данные.
Если требуется более сложная валидация, можно расширить эту функцию, например, проверять длину, формат или значения.
Пример добавления чекбокса и селекта
Допустим, нужно добавить флажок (checkbox) и выпадающий список (select) в настройки. Регистрация и вывод полей будет выглядеть так:
function wp1_register_additional_fields() {
add_settings_field(
'wp1_option_checkbox',
'Включить функцию',
'wp1_option_checkbox_cb',
'wp1-settings',
'wp1_section_main'
);
register_setting('wp1_settings_group', 'wp1_option_checkbox', 'wp1_sanitize_checkbox');
add_settings_field(
'wp1_option_select',
'Выберите вариант',
'wp1_option_select_cb',
'wp1-settings',
'wp1_section_main'
);
register_setting('wp1_settings_group', 'wp1_option_select', 'wp1_sanitize_select');
}
add_action('admin_init', 'wp1_register_additional_fields');
function wp1_option_checkbox_cb() {
$checked = get_option('wp1_option_checkbox') ? 'checked' : '';
echo '<input type="checkbox" id="wp1_option_checkbox" name="wp1_option_checkbox" value="1" ' . $checked . ' />';
}
function wp1_sanitize_checkbox($input) {
return $input == 1 ? 1 : 0;
}
function wp1_option_select_cb() {
$options = array('option1' => 'Вариант 1', 'option2' => 'Вариант 2', 'option3' => 'Вариант 3');
$current = get_option('wp1_option_select', 'option1');
echo '<select id="wp1_option_select" name="wp1_option_select">';
foreach ($options as $value => $label) {
$selected = selected($current, $value, false);
echo "<option value=\"$value\" $selected>$label</option>";
}
echo '</select>';
}
function wp1_sanitize_select($input) {
$valid = array('option1', 'option2', 'option3');
return in_array($input, $valid) ? $input : 'option1';
}Так мы добавили два новых поля с правильной регистрацией и валидацией.
Использование настроек в коде темы или плагина
Чтобы использовать сохранённые настройки, достаточно получить их через get_option. Например, чтобы проверить, включена ли функция и получить текстовое значение:
$enabled = get_option('wp1_option_checkbox', 0);
$text = get_option('wp1_option_text', '');
if ($enabled) {
echo 'Функция включена. Текст: ' . esc_html($text);
}Это можно использовать в любых хуках или шаблонах WordPress.
Рекомендуемые плагины для расширенной работы с настройками
Если не хочется писать код вручную, можно воспользоваться готовыми решениями:
- Advanced Custom Fields (ACF) — удобный интерфейс для создания сложных пользовательских полей и групп настроек.
- OptionTree — фреймворк для создания панелей настроек с множеством типов полей.
- Redux Framework — продвинутый инструмент для создания настроек с поддержкой расширений и шаблонов.
Однако знание базового API WordPress всегда пригодится для тонкой настройки и отладки.
Заключение
Создание собственных настроек в админ панели WordPress — важный навык для разработчика плагинов и тем. Используя стандартные хуки и функции, можно создавать удобный и безопасный интерфейс управления параметрами.
В примерах выше показано, как добавить страницу настроек, зарегистрировать опции, вывести поля с разными типами и валидировать данные. Это позволит вам расширять функционал своих проектов с комфортом для пользователей.