Если вы разрабатываете плагин для WordPress, одна из обязательных задач — это создать удобный интерфейс для настройки параметров плагина. В WordPress для этого обычно используется API опций (options API), позволяющий безопасно сохранять и получать данные из таблицы wp_options. В этой статье мы разберём, как правильно создать страницу настроек плагина, хранить данные в options и работать с формой, чтобы обеспечить безопасность и удобство использования.
Почему именно options API и где хранить настройки плагина
Options API — это встроенный механизм WordPress для хранения настроек и параметров. Данные сохраняются в таблице wp_options, что обеспечивает простоту доступа и совместимость с большинством хостингов и конфигураций. Альтернативой являются пользовательские таблицы базы данных, но для большинства задач options API — оптимальный выбор.
Использование options упрощает перенос и резервное копирование настроек, позволяет легко получать и менять параметры с помощью функций get_option и update_option.
Важно придерживаться единообразия в именовании опций, чтобы избежать конфликтов с другими плагинами. Хорошая практика — использовать префиксы, например, wpin_ для вашего плагина.
Создание страницы настроек в админке WordPress
Для добавления страницы настроек в меню админки WordPress используется функция add_options_page или add_menu_page. Рекомендуется регистрировать страницу в хуке admin_menu.
add_action('admin_menu', 'wpin_register_settings_page');
function wpin_register_settings_page() {
add_options_page(
'Настройки моего плагина',
'WPIN Настройки',
'manage_options',
'wpin-settings',
'wpin_render_settings_page'
);
}
В данном примере создаётся страница настроек в разделе «Настройки» с заголовком «WPIN Настройки».
Вывод формы настроек
Функция wpin_render_settings_page отвечает за вывод HTML формы с настройками. Для обработки и сохранения данных используем функции WordPress: settings_fields, do_settings_sections и submit_button.
function wpin_render_settings_page() {
?>
<div class="wrap">
<h1>Настройки моего плагина</h1>
<form method="post" action="options.php">
<?php
settings_fields('wpin_options_group');
do_settings_sections('wpin-settings');
submit_button();
?>
</form>
</div>
<?php
}
Регистрация настроек и полей
Чтобы WordPress знал, какие настройки обрабатывать и сохранять, нужно их зарегистрировать в хуке admin_init. Также здесь описываем секции и поля формы.
add_action('admin_init', 'wpin_register_settings');
function wpin_register_settings() {
register_setting('wpin_options_group', 'wpin_options', 'wpin_sanitize_options');
add_settings_section(
'wpin_main_section',
'Основные настройки',
'wpin_main_section_callback',
'wpin-settings'
);
add_settings_field(
'wpin_text_field',
'Текстовое поле',
'wpin_text_field_callback',
'wpin-settings',
'wpin_main_section'
);
add_settings_field(
'wpin_checkbox_field',
'Чекбокс',
'wpin_checkbox_field_callback',
'wpin-settings',
'wpin_main_section'
);
}
function wpin_main_section_callback() {
echo '<p>Настройте параметры плагина ниже.</p>';
}
function wpin_text_field_callback() {
$options = get_option('wpin_options');
$value = isset($options['text_field']) ? esc_attr($options['text_field']) : '';
echo "<input type='text' name='wpin_options[text_field]' value='$value' />";
}
function wpin_checkbox_field_callback() {
$options = get_option('wpin_options');
$checked = isset($options['checkbox_field']) && $options['checkbox_field'] === '1' ? 'checked' : '';
echo "<input type='checkbox' name='wpin_options[checkbox_field]' value='1' $checked />";
}
Обратите внимание, что все поля сгруппированы в массив wpin_options, что упрощает хранение и обработку.
Обработка и валидация данных
Для безопасности и корректной работы обязательно нужно фильтровать и валидировать данные перед сохранением. Функция-санитайзер передается третьим параметром в register_setting.
function wpin_sanitize_options($input) {
$output = [];
if (isset($input['text_field'])) {
$output['text_field'] = sanitize_text_field($input['text_field']);
}
$output['checkbox_field'] = isset($input['checkbox_field']) && $input['checkbox_field'] === '1' ? '1' : '0';
return $output;
}
Здесь мы используем sanitize_text_field для текстового поля и явно устанавливаем значение чекбокса в '1' или '0'. Это предотвращает сохранение некорректных или вредоносных данных.
Использование сохранённых настроек в коде плагина
После того, как настройки сохранены, можно получать их в любом месте плагина при помощи get_option('wpin_options'). Например:
$options = get_option('wpin_options');
$text = isset($options['text_field']) ? $options['text_field'] : 'Значение по умолчанию';
if (!empty($options['checkbox_field']) && $options['checkbox_field'] === '1') {
// Выполняем логику если чекбокс отмечен
}
Такой подход позволяет гибко настраивать поведение плагина в зависимости от пользовательских параметров.
Примеры полезных плагинов с интерфейсом настроек
Если вы хотите изучить готовые решения, обратите внимание на плагины как Clearfy Pro — в нем очень продуманная система настроек с использованием options API и расширенных функций WordPress.
Итоги и рекомендации
- Всегда используйте префиксы для опций, чтобы избежать конфликтов.
- Регулярно валидируйте и санитизируйте входящие данные.
- Используйте встроенные функции WordPress для генерации полей и обработки настроек.
- Разделяйте функциональность: регистрация настроек, вывод формы и обработка данных должны быть в отдельных функциях.
- Тестируйте страницу настроек на разных ролях пользователей и проверяйте права доступа.
Создание удобной и безопасной страницы настроек — важный этап в разработке плагина, который улучшит опыт пользователя и облегчит администрирование.