Каждому разработчику плагинов для WordPress рано или поздно приходится создавать интерфейс настроек. Это необходимо для того, чтобы пользователи могли гибко управлять функционалом плагина без правки кода. В этой статье мы подробно рассмотрим, как создать удобный и безопасный раздел настроек для вашего плагина, используя нативные возможности WordPress.
Почему важно создавать собственные настройки для плагина
Настройки дают пользователю контроль над поведением плагина, делают его более универсальным и востребованным. Без настроек ваш плагин будет либо жестко фиксированным, либо потребует вмешательства в код, что недопустимо для большинства пользователей.
Правильно оформленные настройки повышают доверие к плагину и помогают избежать конфликтов и ошибок. Кроме того, использование стандартных API WordPress для настроек гарантирует совместимость и безопасность.
Используемые инструменты WordPress для создания настроек
WordPress предоставляет несколько основных функций и API для работы с настройками:
add_options_page()— добавляет страницу настроек в меню администратора;register_setting()— регистрирует группу настроек для безопасного сохранения;add_settings_section()— добавляет секцию на страницу настроек;add_settings_field()— добавляет отдельное поле настройки;- Функции
get_option()иupdate_option()для чтения и записи данных.
Использование этого набора обеспечивает стандартизированный и безопасный интерфейс.
Шаг 1. Добавляем страницу настроек в админ-панель WordPress
Для начала создадим функцию, которая добавит страницу настроек в меню «Настройки».
function wpdigest_add_settings_page() {
add_options_page(
'Настройки плагина WP Digest',
'WP Digest',
'manage_options',
'wpdigest-settings',
'wpdigest_render_settings_page'
);
}
add_action('admin_menu', 'wpdigest_add_settings_page');
Параметры функции понятны: заголовок страницы, название меню, права доступа, слаг страницы и callback для вывода содержимого.
Шаг 2. Регистрируем настройки, секции и поля
Теперь нам нужно зарегистрировать настройки и определить поля ввода.
function wpdigest_register_settings() {
register_setting('wpdigest_options_group', 'wpdigest_options', 'wpdigest_sanitize_options');
add_settings_section(
'wpdigest_main_section',
'Основные настройки',
'wpdigest_main_section_cb',
'wpdigest-settings'
);
add_settings_field(
'wpdigest_text_field',
'Текстовое поле',
'wpdigest_text_field_cb',
'wpdigest-settings',
'wpdigest_main_section'
);
add_settings_field(
'wpdigest_checkbox_field',
'Флажок',
'wpdigest_checkbox_field_cb',
'wpdigest-settings',
'wpdigest_main_section'
);
}
add_action('admin_init', 'wpdigest_register_settings');
Здесь мы определили группу настроек wpdigest_options_group, одну секцию и два поля — текстовое и чекбокс.
Обработчики секции и полей
Функции обратного вызова для вывода описаний и полей выглядят так:
function wpdigest_main_section_cb() {
echo '<p>Настройте основные параметры плагина здесь.</p>';
}
function wpdigest_text_field_cb() {
$options = get_option('wpdigest_options');
$value = isset($options['text_field']) ? esc_attr($options['text_field']) : '';
echo "<input type='text' name='wpdigest_options[text_field]' value='$value' class='regular-text' />";
}
function wpdigest_checkbox_field_cb() {
$options = get_option('wpdigest_options');
$checked = !empty($options['checkbox_field']) ? 'checked' : '';
echo "<input type='checkbox' name='wpdigest_options[checkbox_field]' value='1' $checked />";
}
Шаг 3. Обработка и валидация данных
Важно обезопасить ввод, чтобы не допустить нежелательных данных. Для этого создадим функцию валидации:
function wpdigest_sanitize_options($input) {
$output = array();
if (isset($input['text_field'])) {
$output['text_field'] = sanitize_text_field($input['text_field']);
}
$output['checkbox_field'] = !empty($input['checkbox_field']) ? 1 : 0;
return $output;
}
Эта функция удаляет опасные символы из текста и гарантирует, что чекбокс будет либо 1, либо 0.
Шаг 4. Вывод страницы настроек
Теперь создадим функцию, которая выведет форму настроек на страницу.
function wpdigest_render_settings_page() {
if (!current_user_can('manage_options')) {
return;
}
if (isset($_GET['settings-updated'])) {
add_settings_error('wpdigest_messages', 'wpdigest_message', 'Настройки сохранены', 'updated');
}
settings_errors('wpdigest_messages');
?>
<div class="wrap">
<h1>Настройки плагина WP Digest</h1>
<form action='options.php' method='post'>
<?php
settings_fields('wpdigest_options_group');
do_settings_sections('wpdigest-settings');
submit_button('Сохранить настройки');
?>
</form>
</div>
<?php
}
Функции settings_fields() и do_settings_sections() автоматически формируют необходимые скрытые поля и выводят все секции с полями.
Практические советы по улучшению UX настроек
Настройки — это не просто набор полей. От их удобства зависит восприятие всего плагина. Вот несколько рекомендаций:
- Группируйте параметры по логическим разделам, используйте
add_settings_section()для этого. - Добавляйте пояснения к полям и секциям, чтобы пользователь понимал назначение каждого параметра.
- Используйте разные типы полей: текстовые, селекты, чекбоксы, радиокнопки для удобства.
- Добавляйте валидацию и показывайте ошибки при неправильном вводе.
- Минимизируйте количество настроек, оставляя только необходимые.
Пример расширения: сохранение массива настроек и их использование
Допустим, мы хотим сохранить несколько адресов электронной почты для рассылки. Для этого можно добавить поле textarea и сохранять массив.
function wpdigest_register_settings() {
register_setting('wpdigest_options_group', 'wpdigest_options', 'wpdigest_sanitize_options');
add_settings_section('wpdigest_email_section', 'Настройки Email', null, 'wpdigest-settings');
add_settings_field(
'wpdigest_emails',
'Email для рассылки (через запятую)',
'wpdigest_emails_field_cb',
'wpdigest-settings',
'wpdigest_email_section'
);
}
function wpdigest_emails_field_cb() {
$options = get_option('wpdigest_options');
$value = isset($options['emails']) ? esc_textarea($options['emails']) : '';
echo "<textarea name='wpdigest_options[emails]' rows='5' cols='50'>$value</textarea>";
}
function wpdigest_sanitize_options($input) {
$output = array();
if (isset($input['emails'])) {
$emails_raw = explode(',', $input['emails']);
$clean_emails = array();
foreach ($emails_raw as $email) {
$email_trimmed = trim($email);
if (is_email($email_trimmed)) {
$clean_emails[] = $email_trimmed;
}
}
$output['emails'] = implode(', ', $clean_emails);
}
// Остальные поля как ранее
return $output;
}
Так мы принимаем список email, фильтруем их и сохраняем в едином формате.
Заключение: создание настроек — это просто и эффективно
Использование стандартных функций WordPress для создания настроек позволяет сделать плагин гибким, удобным и безопасным. Помните про валидацию и пользовательский опыт, добавляйте подсказки и разделяйте настройки на логические блоки.
Если вы хотите углубиться, изучите классы Settings API и сторонние библиотеки для UI, например, Settings Framework или CMB2, которые ускоряют разработку сложных интерфейсов.
Таким образом, создание настроек — не сложно и значительно повышает качество вашего плагина.