Создание пользовательских настроек для плагина — одна из ключевых задач разработчика WordPress. В этой статье мы подробно разберём, как с помощью стандартного Options API WordPress создать страницу настроек в админке, хранить данные в таблице wp_options и обеспечивать безопасность ввода. Это позволит вам создавать гибкие плагины с удобным интерфейсом для пользователей.
Почему важно использовать Options API для хранения настроек
WordPress предоставляет удобный и стандартизированный способ работы с настройками — Options API. Он хранит данные в таблице wp_options, что гарантирует совместимость с другими плагинами и темами, а также позволяет легко кэшировать и получать настройки.
Использование Options API упрощает работу с настройками и снижает риск конфликтов с другими компонентами сайта. Кроме того, это встроенный инструмент WordPress, который обеспечивает безопасность и валидность данных при правильной реализации.
Для примера создадим плагин wpengine-settings, который добавляет страницу настроек в меню «Настройки».
Создание страницы настроек плагина в админке WordPress
Первый шаг — зарегистрировать страницу настроек, которая будет отображаться в меню админки. Для этого используем хук admin_menu:
add_action('admin_menu', 'wpengine_settings_add_admin_menu');
function wpengine_settings_add_admin_menu() {
add_options_page(
'Настройки WPengine', // Заголовок страницы
'WPengine Settings', // Название меню
'manage_options', // Права доступа
'wpengine_settings', // Уникальный slug
'wpengine_settings_page'// Функция вывода страницы
);
}Функция add_options_page создаёт раздел в меню «Настройки». Далее определим функцию вывода страницы wpengine_settings_page:
function wpengine_settings_page() {
?>
<div class="wrap">
<h1>Настройки WPengine</h1>
<form action="options.php" method="post">
<?php
settings_fields('wpengine_settings_group');
do_settings_sections('wpengine_settings');
submit_button();
?>
</form>
</div>
<?php
}Здесь мы используем стандартные функции settings_fields и do_settings_sections, которые автоматически добавляют скрытые поля безопасности и выводят зарегистрированные секции и поля настроек.
Регистрация настроек и полей
Для регистрации настроек воспользуемся хуком admin_init. Здесь мы зарегистрируем группу настроек, добавим секцию и поля с валидацией:
add_action('admin_init', 'wpengine_settings_init');
function wpengine_settings_init() {
// Регистрируем группу настроек
register_setting('wpengine_settings_group', 'wpengine_settings_options', 'wpengine_settings_validate');
// Добавляем секцию
add_settings_section(
'wpengine_settings_section',
'Основные настройки',
'wpengine_settings_section_callback',
'wpengine_settings'
);
// Добавляем поля
add_settings_field(
'wpengine_text_field',
'Текстовое поле',
'wpengine_text_field_render',
'wpengine_settings',
'wpengine_settings_section'
);
add_settings_field(
'wpengine_checkbox_field',
'Чекбокс',
'wpengine_checkbox_field_render',
'wpengine_settings',
'wpengine_settings_section'
);
}
function wpengine_settings_section_callback() {
echo '<p>Настройте параметры плагина WPengine здесь.</p>';
}
function wpengine_text_field_render() {
$options = get_option('wpengine_settings_options');
?>
<input type="text" name="wpengine_settings_options[wpengine_text_field]" value="<?php echo esc_attr($options['wpengine_text_field'] ?? ''); ?>" />
<?php
}
function wpengine_checkbox_field_render() {
$options = get_option('wpengine_settings_options');
?>
<input type="checkbox" name="wpengine_settings_options[wpengine_checkbox_field]" <?php checked(isset($options['wpengine_checkbox_field']), 1); ?> value="1" />
<?php
}Валидация и очистка данных
Очень важно обрабатывать и валидировать входящие данные, чтобы избежать уязвимостей и ошибок. Функция валидации вызывается автоматически при сохранении настроек:
function wpengine_settings_validate($input) {
$output = [];
if (isset($input['wpengine_text_field'])) {
$output['wpengine_text_field'] = sanitize_text_field($input['wpengine_text_field']);
}
$output['wpengine_checkbox_field'] = !empty($input['wpengine_checkbox_field']) ? 1 : 0;
return $output;
}Здесь мы используем sanitize_text_field для очистки текстового поля и преобразуем чекбокс в 0 или 1.
Использование настроек в коде плагина
После сохранения настроек вы можете получить их так:
$options = get_option('wpengine_settings_options');
$text = $options['wpengine_text_field'] ?? '';
$checked = !empty($options['wpengine_checkbox_field']);Например, можно вывести значения на фронтенде или использовать их в логике плагина.
Продвинутые советы по созданию настроек
Добавление полей с выбором и цветовых селекторов
Опции могут быть не только текстовыми и чекбоксами. WordPress позволяет создавать селекты, радио кнопки, цветовые палитры и т.д.
function wpengine_color_field_render() {
$options = get_option('wpengine_settings_options');
?>
<input type="text" name="wpengine_settings_options[color_field]" value="<?php echo esc_attr($options['color_field'] ?? '#000000'); ?>" class="wp-color-picker-field" data-default-color="#000000" />
<?php
}
add_action('admin_enqueue_scripts', function() {
wp_enqueue_style('wp-color-picker');
wp_enqueue_script('wp-color-picker');
});Это добавит удобный выбор цвета с помощью стандартного WordPress color picker.
Использование библиотек и готовых решений
Если нужна более сложная форма настроек — обратите внимание на плагин Clearfy Pro, который расширяет возможности настроек и оптимизации сайта.
Безопасность и права доступа
Обязательно проверяйте права доступа пользователя с помощью current_user_can('manage_options'), чтобы не допустить несанкционированное изменение настроек.
В форме мы используем settings_fields, которая автоматически добавляет nonce и проверяет их при сохранении.
Итог
Создание страницы настроек с сохранением данных в options — базовая, но очень важная задача для любого разработчика плагинов WordPress. Используя стандартный Options API, вы получите совместимый и безопасный код, который легко расширять и поддерживать.
Пример кода из статьи можно использовать как шаблон для своих проектов и дополнить по необходимости.