В этой статье мы подробно рассмотрим, как создать собственный интерфейс настроек для вашего плагина WordPress с помощью встроенного Settings API. Это позволит вам легко добавлять страницы настроек в админ-панель, сохранять и валидировать данные, а также выводить их пользователям в удобном виде.
Что такое Settings API и зачем он нужен
Settings API — это набор функций WordPress, предназначенный для упрощения создания страниц настроек в админке. Он обеспечивает стандартизированный способ регистрации, отображения и сохранения опций плагина, а также обработку ошибок и защиту данных.
Использование Settings API позволяет избежать ошибок при работе с $_POST и базой данных, а также улучшает совместимость плагина с другими расширениями и будущими версиями WordPress.
Основные компоненты Settings API
Settings API включает три ключевых компонента:
- Настройки (Settings) — отдельные опции, которые сохраняются в базе данных.
- Разделы (Sections) — логическое объединение настроек для удобства отображения.
- Поля (Fields) — элементы формы, с помощью которых пользователь вводит данные.
Каждый из них нужно зарегистрировать, чтобы WordPress знал, как их обработать.
Пошаговое создание страницы настроек плагина на примере wponline_settings
Рассмотрим создание страницы настроек с тремя полями: текстовое, чекбокс и селектор.
Шаг 1. Добавляем меню в админку
add_action('admin_menu', 'wponline_add_plugin_page');
function wponline_add_plugin_page() {
add_options_page(
'Настройки WPOnline',
'WPOnline Settings',
'manage_options',
'wponline-settings',
'wponline_create_admin_page'
);
}Функция add_options_page добавляет пункт меню в раздел "Настройки".
Шаг 2. Регистрируем настройки, разделы и поля
add_action('admin_init', 'wponline_settings_init');
function wponline_settings_init() {
register_setting('wponline_options_group', 'wponline_options', 'wponline_sanitize');
add_settings_section(
'wponline_section_id',
'Основные настройки',
'wponline_section_info',
'wponline-settings'
);
add_settings_field(
'text_field',
'Текстовое поле',
'wponline_text_field_callback',
'wponline-settings',
'wponline_section_id'
);
add_settings_field(
'checkbox_field',
'Чекбокс',
'wponline_checkbox_field_callback',
'wponline-settings',
'wponline_section_id'
);
add_settings_field(
'select_field',
'Выбор из списка',
'wponline_select_field_callback',
'wponline-settings',
'wponline_section_id'
);
}Шаг 3. Описываем функции вывода раздела и полей
function wponline_section_info() {
echo '<p>Здесь вы можете настроить параметры плагина WPOnline.</p>';
}
function wponline_text_field_callback() {
$options = get_option('wponline_options');
printf(
'<input type="text" id="text_field" name="wponline_options[text_field]" value="%s" size="40" />',
isset($options['text_field']) ? esc_attr($options['text_field']) : ''
);
}
function wponline_checkbox_field_callback() {
$options = get_option('wponline_options');
$checked = isset($options['checkbox_field']) ? checked(1, $options['checkbox_field'], false) : '';
printf(
'<input type="checkbox" id="checkbox_field" name="wponline_options[checkbox_field]" value="1" %s />',
$checked
);
}
function wponline_select_field_callback() {
$options = get_option('wponline_options');
$selected = isset($options['select_field']) ? $options['select_field'] : '';
$choices = [
'option_1' => 'Опция 1',
'option_2' => 'Опция 2',
'option_3' => 'Опция 3',
];
echo '<select id="select_field" name="wponline_options[select_field]">';
foreach ($choices as $value => $label) {
printf('<option value="%s" %s>%s</option>', $value, selected($selected, $value, false), $label);
}
echo '</select>';
}Шаг 4. Обработка и валидация данных
function wponline_sanitize($input) {
$sanitized = [];
if (isset($input['text_field'])) {
$sanitized['text_field'] = sanitize_text_field($input['text_field']);
}
$sanitized['checkbox_field'] = isset($input['checkbox_field']) && $input['checkbox_field'] == 1 ? 1 : 0;
if (isset($input['select_field'])) {
$valid_choices = ['option_1', 'option_2', 'option_3'];
if (in_array($input['select_field'], $valid_choices)) {
$sanitized['select_field'] = $input['select_field'];
}
}
return $sanitized;
}Шаг 5. Вывод страницы настроек
function wponline_create_admin_page() {
?>
<div class="wrap">
<h1>Настройки WPOnline</h1>
<form method="post" action="options.php">
<?php
settings_fields('wponline_options_group');
do_settings_sections('wponline-settings');
submit_button();
?>
</form>
</div>
<?php
}Примеры полезных плагинов для работы с настройками
Если вы хотите расширить функционал или упростить работу с настройками, обратите внимание на плагины:
- Clearfy Pro — оптимизация и очистка WordPress с удобным интерфейсом настроек.
- WPRemark — улучшение комментариев с гибкими настройками.
Советы для разработчиков при работе с Settings API
При создании настроек плагина через Settings API рекомендуется придерживаться следующих правил:
- Используйте префиксы в именах функций и опций, чтобы избежать конфликтов с другими плагинами.
- Обязательно валидируйте и очищайте входящие данные через функции sanitize_*, чтобы не допустить уязвимостей.
- Добавляйте подсказки и описания к полям, чтобы пользователям было понятно, что они настраивают.
- Тестируйте работу настроек на разных версиях WordPress и с разными темами.
Правильная организация настроек улучшит пользовательский опыт и облегчит поддержку вашего плагина.