Создание страницы настроек для плагина — важный этап в разработке функционального и удобного плагина WordPress. В этой статье мы подробно разберём, как с помощью WordPress Settings API создать полноценную страницу настроек с разными типами полей, валидацией и сохранением данных. Приведём примеры кода, которые легко адаптировать под свои задачи.
Что такое Settings API и почему его стоит использовать
Settings API — это встроенный в WordPress набор функций для упрощения создания и обработки настроек. Он обеспечивает безопасность, стандартизацию и интеграцию с админкой WordPress, избавляя от необходимости писать много кода вручную.
Используя Settings API, вы автоматически получаете:
- Регистрируемые настройки с валидацией;
- Автоматическое сохранение и загрузку данных;
- Удобную структуру для отображения настроек в админке;
- Поддержку проверки прав доступа.
Это значительно упрощает поддержку и развитие плагина.
Регистрация страницы настроек и секций
Первый шаг — добавить страницу в меню админки и зарегистрировать секции и поля настроек. Ниже пример функции wpinru_register_plugin_settings, которую нужно повесить на хук admin_menu и admin_init:
function wpinru_register_plugin_settings() {
// Добавляем страницу настроек в меню
add_options_page(
'Настройки моего плагина',
'Мой плагин',
'manage_options',
'wpinru-plugin-settings',
'wpinru_plugin_settings_page'
);
// Регистрируем настройки
register_setting('wpinru_plugin_options_group', 'wpinru_plugin_options', 'wpinru_sanitize_options');
// Добавляем секцию
add_settings_section(
'wpinru_main_section',
'Основные настройки',
'wpinru_main_section_callback',
'wpinru-plugin-settings'
);
// Добавляем поля
add_settings_field(
'wpinru_text_field',
'Текстовое поле',
'wpinru_text_field_callback',
'wpinru-plugin-settings',
'wpinru_main_section'
);
add_settings_field(
'wpinru_checkbox',
'Чекбокс',
'wpinru_checkbox_callback',
'wpinru-plugin-settings',
'wpinru_main_section'
);
}
add_action('admin_menu', 'wpinru_register_plugin_settings');
add_action('admin_init', 'wpinru_register_plugin_settings');Здесь мы создали страницу настроек в разделе «Настройки» с двумя полями: текстовым и чекбоксом.
Колбэки для секции и полей
Для вывода описания секции и полей нужны callback-функции:
function wpinru_main_section_callback() {
echo '<p>Здесь вы можете изменить основные параметры плагина.</p>';
}
function wpinru_text_field_callback() {
$options = get_option('wpinru_plugin_options');
$value = isset($options['wpinru_text_field']) ? esc_attr($options['wpinru_text_field']) : '';
echo '<input type="text" name="wpinru_plugin_options[wpinru_text_field]" value="' . $value . '" size="40">';
}
function wpinru_checkbox_callback() {
$options = get_option('wpinru_plugin_options');
$checked = isset($options['wpinru_checkbox']) && $options['wpinru_checkbox'] ? 'checked' : '';
echo '<input type="checkbox" name="wpinru_plugin_options[wpinru_checkbox]" value="1" ' . $checked . '> Включить функцию';
}Создание страницы настроек и обработка сохранения
Страница настроек должна содержать форму, которая отправляет данные на options.php — стандартный обработчик WordPress для настроек.
function wpinru_plugin_settings_page() {
?>
<div class="wrap">
<h1>Настройки моего плагина</h1>
<form method="post" action="options.php">
<?php
settings_fields('wpinru_plugin_options_group');
do_settings_sections('wpinru-plugin-settings');
submit_button();
?>
</form>
</div>
<?php
}Вызов settings_fields добавляет скрытые поля безопасности. do_settings_sections выводит все зарегистрированные секции и поля. Кнопка submit_button создаёт кнопку для сохранения.
Валидация и очистка данных настроек
Чтобы защитить и правильно сохранить данные, реализуем функцию очистки и валидации:
function wpinru_sanitize_options($input) {
$output = array();
if (isset($input['wpinru_text_field'])) {
$output['wpinru_text_field'] = sanitize_text_field($input['wpinru_text_field']);
}
$output['wpinru_checkbox'] = isset($input['wpinru_checkbox']) && $input['wpinru_checkbox'] == 1 ? 1 : 0;
return $output;
}Эта функция гарантирует, что текстовое поле содержит только безопасный текст, а чекбокс будет либо 1, либо 0.
Добавление дополнительных типов полей настроек
Выпадающий список (select)
Для выбора из нескольких вариантов удобно использовать выпадающий список. Пример добавления поля:
add_settings_field(
'wpinru_select_field',
'Выбор опции',
'wpinru_select_field_callback',
'wpinru-plugin-settings',
'wpinru_main_section'
);
function wpinru_select_field_callback() {
$options = get_option('wpinru_plugin_options');
$selected = isset($options['wpinru_select_field']) ? $options['wpinru_select_field'] : '';
$choices = array('option1' => 'Опция 1', 'option2' => 'Опция 2', 'option3' => 'Опция 3');
echo '<select name="wpinru_plugin_options[wpinru_select_field]">';
foreach ($choices as $value => $label) {
$sel = selected($selected, $value, false);
echo "<option value=\"$value\" $sel>$label</option>";
}
echo '</select>';
}Не забудьте добавить обработку этого поля в функцию валидации.
Поле цвета
Для выбора цвета можно использовать стандартный HTML5 input type="color". Пример:
add_settings_field(
'wpinru_color_field',
'Цвет фона',
'wpinru_color_field_callback',
'wpinru-plugin-settings',
'wpinru_main_section'
);
function wpinru_color_field_callback() {
$options = get_option('wpinru_plugin_options');
$color = isset($options['wpinru_color_field']) ? esc_attr($options['wpinru_color_field']) : '#ffffff';
echo '<input type="color" name="wpinru_plugin_options[wpinru_color_field]" value="' . $color . '">';
}Как использовать настройки в коде плагина
После сохранения настроек получить значения можно через get_option:
$options = get_option('wpinru_plugin_options');
$text = isset($options['wpinru_text_field']) ? $options['wpinru_text_field'] : '';
$enabled = !empty($options['wpinru_checkbox']);Далее эти значения можно использовать для управления поведением плагина, например, для включения или отключения функций.
Полезные плагины для расширения возможностей настроек
Если хочется упростить создание настроек, можно использовать готовые библиотеки и плагины, например:
- Clearfy Pro (https://wpshop.ru/clearfy-pro/?utm_source=wpin.ru&utm_medium=article&utm_campaign=kak-sozdat-nastroyki-plaginov-wordpress-s-primerami-koda) — для оптимизации и настройки безопасности сайта;
- WPCommunity (https://wpshop.ru/wpcommunity/?utm_source=wpin.ru&utm_medium=article&utm_campaign=kak-sozdat-nastroyki-plaginov-wordpress-s-primerami-koda) — если создаёте плагин с социальной составляющей;
- Expert Review (https://wpshop.ru/expert-review/?utm_source=wpin.ru&utm_medium=article&utm_campaign=kak-sozdat-nastroyki-plaginov-wordpress-s-primerami-koda) — для добавления отзывов с настройками.
Они помогут быстро добавить нужный функционал без лишних усилий.
Советы по безопасности и удобству
При создании настроек обязательно проверяйте права пользователя через current_user_can('manage_options'), чтобы не допустить несанкционированного доступа. Используйте функции очистки данных и escape при выводе.
Для удобства администраторов добавляйте описания к полям, используйте табы или аккордеоны для группировки настроек при большом количестве опций.