Создание панели настроек — важный этап разработки плагина WordPress. Это позволяет пользователю настраивать поведение плагина без правок кода, делая продукт более удобным и гибким. В этой статье на примере рассмотрим, как создать собственную страницу настроек с использованием стандартного WordPress Settings API.
Почему стоит использовать Settings API для создания настроек плагина
Settings API — это встроенный в WordPress набор функций и хуков, который упрощает создание страниц настроек, обработку данных и сохранение их в базе. Он обеспечивает:
- Автоматическую валидацию и защиту данных;
- Стандартизированный интерфейс для добавления настроек;
- Интеграцию с системой ролей и прав доступа;
- Хорошую совместимость с будущими версиями WordPress.
Использование Settings API позволяет избежать ошибок в безопасности и упрощает поддержку кода.
Создаем базовый плагин и подключаем страницу настроек
Начнем с создания минимального плагина. Создайте папку wplite-settings в директории wp-content/plugins и файл wplite-settings.php с таким кодом:
<?php
/**
* Plugin Name: WPLite Settings Example
* Description: Пример создания панели настроек для плагина
* Version: 1.0
* Author: WPLite.ru
*/
// Добавляем меню в админку
add_action('admin_menu', 'wplite_add_settings_page');
function wplite_add_settings_page() {
add_options_page(
'Настройки WPLite',
'WPLite Settings',
'manage_options',
'wplite-settings',
'wplite_render_settings_page'
);
}
// Рендерим страницу настроек
function wplite_render_settings_page() {
?>
<div class="wrap">
<h1>Настройки плагина WPLite</h1>
<form method="post" action="options.php">
<?php
settings_fields('wplite_settings_group');
do_settings_sections('wplite-settings');
submit_button();
?>
</form>
</div>
<?php
}
Этот код добавляет пункт меню в раздел «Настройки» и выводит форму с вызовами функций, которые мы зарегистрируем ниже.
Регистрация настроек, секций и полей
Следующий шаг — зарегистрировать настройки и поля, чтобы они отображались и сохранялись корректно. Добавим код в тот же файл:
add_action('admin_init', 'wplite_register_settings');
function wplite_register_settings() {
// Регистрируем настройку
register_setting('wplite_settings_group', 'wplite_text_option', array(
'type' => 'string',
'sanitize_callback' => 'sanitize_text_field',
'default' => '',
));
// Добавляем секцию
add_settings_section(
'wplite_main_section',
'Основные настройки',
'wplite_main_section_cb',
'wplite-settings'
);
// Добавляем поле
add_settings_field(
'wplite_text_option',
'Текстовое поле',
'wplite_text_option_cb',
'wplite-settings',
'wplite_main_section'
);
}
// Колбэк для описания секции
function wplite_main_section_cb() {
echo '<p>Настройте параметры плагина здесь.</p>';
}
// Колбэк для поля ввода
function wplite_text_option_cb() {
$value = get_option('wplite_text_option', '');
echo '<input type="text" name="wplite_text_option" value="' . esc_attr($value) . '" class="regular-text" />';
}
Здесь мы создали одну настройку типа строка, добавили секцию с описанием и поле ввода. Функция sanitize_text_field обезопасит сохранение данных.
Расширяем настройки: добавляем чекбокс и выпадающий список
Часто нужно не только текст, но и другие типы полей. Добавим чекбокс и селект с вариантами.
add_action('admin_init', 'wplite_register_more_settings');
function wplite_register_more_settings() {
// Чекбокс
register_setting('wplite_settings_group', 'wplite_checkbox_option', array(
'type' => 'boolean',
'sanitize_callback' => 'wplite_sanitize_checkbox',
'default' => false,
));
add_settings_field(
'wplite_checkbox_option',
'Включить функцию',
'wplite_checkbox_option_cb',
'wplite-settings',
'wplite_main_section'
);
// Селект
register_setting('wplite_settings_group', 'wplite_select_option', array(
'type' => 'string',
'sanitize_callback' => 'wplite_sanitize_select',
'default' => 'option1',
));
add_settings_field(
'wplite_select_option',
'Выберите опцию',
'wplite_select_option_cb',
'wplite-settings',
'wplite_main_section'
);
}
// Санитайзеры
function wplite_sanitize_checkbox($input) {
return ($input === '1') ? true : false;
}
function wplite_sanitize_select($input) {
$valid = array('option1', 'option2', 'option3');
if (in_array($input, $valid, true)) {
return $input;
}
return 'option1';
}
// Рендер полей
function wplite_checkbox_option_cb() {
$checked = get_option('wplite_checkbox_option', false);
echo '<input type="checkbox" name="wplite_checkbox_option" value="1" ' . checked(1, $checked, false) . ' />';
}
function wplite_select_option_cb() {
$value = get_option('wplite_select_option', 'option1');
$options = array(
'option1' => 'Опция 1',
'option2' => 'Опция 2',
'option3' => 'Опция 3',
);
echo '<select name="wplite_select_option">';
foreach ($options as $key => $label) {
printf('<option value="%s" %s>%s</option>', esc_attr($key), selected($value, $key, false), esc_html($label));
}
echo '</select>';
}
Так мы добавили два новых поля с проверкой и выводом. Обратите внимание, что для чекбокса важно правильно обрабатывать значение, так как при снятии галочки параметр не передается.
Как использовать сохраненные настройки в вашем плагине
После того как пользователь сохранил параметры, вы можете получить их через функцию get_option(). Например, чтобы вывести текст из поля:
$text = get_option('wplite_text_option', '');
echo 'Вы ввели: ' . esc_html($text);
Или проверить состояние чекбокса:
$enabled = get_option('wplite_checkbox_option', false);
if ($enabled) {
// Ваша логика, если функция включена
}
Такое использование позволяет гибко настраивать логику плагина в зависимости от предпочтений пользователя.
Советы по безопасности и UX при создании настроек
При работе с настройками важно:
- Использовать функции санитайзинга, например
sanitize_text_fieldили кастомные проверки; - Проверять права пользователя с помощью
current_user_can('manage_options'); - Добавлять подсказки и описания для полей, чтобы пользователь понимал, что именно настраивает;
- Использовать стандартные элементы интерфейса WordPress для единообразия.
Хороший UX снижает количество ошибок и повышает доверие к плагину.
Альтернативы и полезные плагины для создания настроек
Если не хочется писать всё самому, можно использовать готовые библиотеки и плагины:
- Redux Framework — мощный фреймворк для создания настроек с множеством типов полей и удобным интерфейсом.
- CMB2 — библиотека для создания метабоксов и настроек с простым API.
- OptionTree — плагин для создания настроек с визуальным редактором.
Эти инструменты помогут быстро добавить гибкие настройки, но понимание работы Settings API полезно для тонкой настройки и устранения проблем.
Заключение
В этой статье мы подробно рассмотрели, как с нуля создать страницу настроек для своего плагина WordPress, используя встроенный Settings API. Показали, как регистрировать настройки, добавлять поля разных типов, обрабатывать и использовать сохраненные данные. Такой подход обеспечивает надежность, безопасность и удобство для пользователей вашего плагина.
Экспериментируйте с настройками, добавляйте свои поля и улучшайте пользовательский опыт — это ключ к успешным и востребованным плагинам на WordPress.