Добавление собственных настроек в админ-панель WordPress – частая задача для разработчиков, которые хотят расширить функциональность сайта или сделать кастомные опции для темы или плагина. В этой статье мы рассмотрим, как правильно и безопасно добавить страницу настроек в админку, создать поля для ввода, сохранить данные и вывести их на фронтенде.
Что такое страница настроек в WordPress и зачем она нужна
Страница настроек — это раздел в административной панели, где пользователь может изменять параметры темы, плагина или сайта в целом. Создание такой страницы позволяет сделать интерфейс управления более удобным, а функции — гибкими. Например, можно добавить настройки логотипа, цвета, текста копирайта или API-ключей.
В WordPress для создания и регистрации настроек используется API настроек (Settings API), который обеспечивает стандартизированный подход к созданию форм, валидации и сохранению данных.
Регистрация страницы настроек: wpbegin_add_settings_page()
Первый шаг — добавить новую страницу в меню админки. Для этого используем хук admin_menu и функцию add_options_page() (или другую функцию для меню в зависимости от места расположения).
function wpbegin_add_settings_page() {
add_options_page(
'Настройки моего плагина', // Заголовок страницы
'Мой плагин', // Название в меню
'manage_options', // Права доступа
'wpbegin_settings', // Уникальный slug
'wpbegin_render_settings_page' // Функция вывода страницы
);
}
add_action('admin_menu', 'wpbegin_add_settings_page');Функция wpbegin_render_settings_page() будет отвечать за вывод HTML формы настроек.
Вывод формы настроек: wpbegin_render_settings_page()
Форма должна содержать вызовы функций WordPress для вывода полей, секций и кнопок сохранения — settings_fields(), do_settings_sections() и submit_button().
function wpbegin_render_settings_page() {
?>
<div class="wrap">
<h1>Настройки моего плагина</h1>
<form method="post" action="options.php">
<?php
settings_fields('wpbegin_options_group');
do_settings_sections('wpbegin_settings');
submit_button();
?>
</form>
</div>
<?php
}Регистрация настроек, секций и полей: wpbegin_register_settings()
Дальше нужно зарегистрировать настройки, добавить секции и поля. Это делается через хук admin_init с использованием функций register_setting(), add_settings_section() и add_settings_field().
function wpbegin_register_settings() {
register_setting('wpbegin_options_group', 'wpbegin_option_name', 'wpbegin_sanitize_callback');
add_settings_section(
'wpbegin_section_id',
'Основные настройки',
'wpbegin_section_callback',
'wpbegin_settings'
);
add_settings_field(
'wpbegin_field_text',
'Текстовое поле',
'wpbegin_field_text_callback',
'wpbegin_settings',
'wpbegin_section_id'
);
}
add_action('admin_init', 'wpbegin_register_settings');Секция: wpbegin_section_callback()
Эта функция выводит описание секции на странице настроек.
function wpbegin_section_callback() {
echo '<p>Здесь вы можете изменить основные параметры плагина.</p>';
}Поле ввода: wpbegin_field_text_callback()
Выводит HTML код поля ввода. Значение берётся из базы опций WordPress через функцию get_option().
function wpbegin_field_text_callback() {
$option = get_option('wpbegin_option_name');
printf(
'<input type="text" id="wpbegin_field_text" name="wpbegin_option_name[text]" value="%s" />',
isset($option['text']) ? esc_attr($option['text']) : ''
);
}Санитизация и валидация данных: wpbegin_sanitize_callback()
Очень важно перед сохранением настроек проверить и очистить входящие данные. В этой функции можно отфильтровать, удалить вредоносный код или преобразовать данные.
function wpbegin_sanitize_callback($input) {
$sanitized = array();
if (isset($input['text'])) {
$sanitized['text'] = sanitize_text_field($input['text']);
}
return $sanitized;
}Пример использования сохранённых данных на фронтенде
После того, как мы сохранили настройки, можно вывести их в шаблоне темы или плагина. Вот простой пример вывода текстового поля:
$options = get_option('wpbegin_option_name');
if (!empty($options['text'])) {
echo '<p>Текст из настроек: ' . esc_html($options['text']) . '</p>';
}Советы и лучшие практики при работе с настройками WordPress
При создании собственных настроек стоит помнить:
- Используйте уникальные префиксы для функций и опций, чтобы избежать конфликтов с другими плагинами.
- Всегда проверяйте права доступа пользователя перед выводом настроек (например,
current_user_can('manage_options')). - Обрабатывайте и фильтруйте все входящие данные, чтобы повысить безопасность.
- Добавляйте описания к полям и секциям, чтобы пользователям было понятно, что они меняют.
- Если нужно много полей, группируйте их в логичные секции для удобства.
Расширение: добавление чекбоксов, селектов и других типов полей
Добавление других типов полей не отличается по логике, меняется только HTML вывод и валидация. Например, для чекбокса можно сделать так:
function wpbegin_field_checkbox_callback() {
$option = get_option('wpbegin_option_name');
$checked = isset($option['checkbox']) && $option['checkbox'] ? 'checked' : '';
printf(
'<input type="checkbox" id="wpbegin_field_checkbox" name="wpbegin_option_name[checkbox]" value="1" %s />',
$checked
);
}Не забудьте добавить соответствующий add_settings_field() для этого поля и обработать его в функции санитизации.