Если вы разрабатываете плагин для WordPress, очень часто возникает необходимость добавить страницу настроек, чтобы пользователь мог управлять параметрами работы вашего плагина. В этой статье мы подробно разберём, как создать собственную страницу настроек плагина в административной панели WordPress, используя встроенные API и лучшие практики.
Основы создания страницы настроек плагина в WordPress
Для начала нужно зарегистрировать новую страницу в меню админки. Для этого используется функция add_options_page(), которая добавляет пункт в меню "Настройки". В WordPresses-релевантном контексте мы создадим функцию, например, wordpresses_add_settings_page(), чтобы избежать конфликтов с другими плагинами.
function wordpresses_add_settings_page() {
add_options_page(
'Настройки плагина WordPresses', // Заголовок страницы
'WPes Плагин', // Название в меню
'manage_options', // Права доступа
'wordpresses-plugin-settings', // Уникальный слаг
'wordpresses_render_settings_page' // Функция вывода страницы
);
}
add_action('admin_menu', 'wordpresses_add_settings_page');В этой функции мы добавили страницу в меню "Настройки" с названием "WPes Плагин". Параметр manage_options гарантирует, что доступ к настройкам будет у администраторов.
Вывод страницы настроек
Теперь создадим функцию wordpresses_render_settings_page(), которая выведет HTML формы с полями настроек. Для простоты возьмём один параметр — текстовое поле с названием.
function wordpresses_render_settings_page() {
?>
<div class="wrap">
<h1>Настройки плагина WordPresses</h1>
<form action="options.php" method="post">
<?php
settings_fields('wordpresses_options_group');
do_settings_sections('wordpresses-plugin-settings');
submit_button();
?>
</form>
</div>
<?php
}Здесь мы используем функции settings_fields() и do_settings_sections(), которые автоматически добавят скрытые поля безопасности и отобразят все зарегистрированные секции и поля.
Регистрация настроек и полей ввода
Чтобы связать форму с реальными настройками и сохранить их, нужно зарегистрировать настройки, секции и поля. Для этого используем хук admin_init и функции register_setting(), add_settings_section() и add_settings_field().
function wordpresses_settings_init() {
// Регистрируем настройку
register_setting('wordpresses_options_group', 'wordpresses_options', 'wordpresses_options_validate');
// Добавляем секцию
add_settings_section(
'wordpresses_main_section',
'Основные параметры',
'wordpresses_section_callback',
'wordpresses-plugin-settings'
);
// Добавляем поле для ввода текста
add_settings_field(
'wordpresses_text_field',
'Текстовое поле',
'wordpresses_text_field_render',
'wordpresses-plugin-settings',
'wordpresses_main_section'
);
}
add_action('admin_init', 'wordpresses_settings_init');Функция register_setting() связывает группу настроек и массив опций, а также задаёт функцию валидации. Далее создаём функции обратного вызова для секции и поля.
Функция вывода описания секции
function wordpresses_section_callback() {
echo '<p>Здесь вы можете изменить основные параметры плагина WordPresses.</p>';
}Функция вывода поля ввода
function wordpresses_text_field_render() {
$options = get_option('wordpresses_options');
?>
<input type="text" name="wordpresses_options[wordpresses_text_field]" value="<?php echo isset($options['wordpresses_text_field']) ? esc_attr($options['wordpresses_text_field']) : ''; ?>" />
<?php
}Обработка и валидация введённых данных
Очень важно не просто сохранить данные, а проверить их на корректность и безопасность. Функция валидации получает массив с значениями и должна вернуть очищенный массив.
function wordpresses_options_validate($input) {
$output = array();
if (isset($input['wordpresses_text_field'])) {
$output['wordpresses_text_field'] = sanitize_text_field($input['wordpresses_text_field']);
}
return $output;
}В этом примере мы используем sanitize_text_field() — стандартную функцию WordPress для очистки текстовых данных от лишних символов и потенциально опасного кода.
Расширение страницы настроек: добавление чекбоксов и селекторов
Один текстовый параметр — это мало. Обычно нужно предоставить пользователю возможность включать и отключать функции, выбирать варианты и т.д. Рассмотрим добавление нескольких полей разных типов.
Добавление чекбокса
add_settings_field(
'wordpresses_checkbox_field',
'Включить функцию',
'wordpresses_checkbox_field_render',
'wordpresses-plugin-settings',
'wordpresses_main_section'
);
function wordpresses_checkbox_field_render() {
$options = get_option('wordpresses_options');
$checked = isset($options['wordpresses_checkbox_field']) ? checked(1, $options['wordpresses_checkbox_field'], false) : '';
echo "<input type='checkbox' name='wordpresses_options[wordpresses_checkbox_field]' value='1' $checked />";
}Добавление селектора (select)
add_settings_field(
'wordpresses_select_field',
'Выберите вариант',
'wordpresses_select_field_render',
'wordpresses-plugin-settings',
'wordpresses_main_section'
);
function wordpresses_select_field_render() {
$options = get_option('wordpresses_options');
$selected = isset($options['wordpresses_select_field']) ? $options['wordpresses_select_field'] : '';
?>
<select name="wordpresses_options[wordpresses_select_field]">
<option value="option1" <?php selected($selected, 'option1'); ?>>Вариант 1</option>
<option value="option2" <?php selected($selected, 'option2'); ?>>Вариант 2</option>
<option value="option3" <?php selected($selected, 'option3'); ?>>Вариант 3</option>
</select>
<?php
}Не забудьте добавить в функцию валидации проверку новых полей, например:
if (isset($input['wordpresses_checkbox_field'])) {
$output['wordpresses_checkbox_field'] = $input['wordpresses_checkbox_field'] ? 1 : 0;
} else {
$output['wordpresses_checkbox_field'] = 0;
}
$valid_options = array('option1', 'option2', 'option3');
if (isset($input['wordpresses_select_field']) && in_array($input['wordpresses_select_field'], $valid_options)) {
$output['wordpresses_select_field'] = $input['wordpresses_select_field'];
}Практические советы и рекомендации
При создании страниц настроек плагина стоит учитывать несколько важных моментов:
- Используйте префиксы в названиях функций и опций — это поможет избежать конфликтов с другими плагинами.
- Валидация данных — всегда проверяйте и очищайте данные перед сохранением.
- Локализация — если планируете распространять плагин, используйте функции перевода
__()и_e(). - Удобство пользователя — логично группируйте настройки, добавляйте описания и подсказки.
Обзор полезных плагинов для создания настроек
Если хотите упростить работу, можно использовать готовые библиотеки и фреймворки:
- Kirki Framework — упрощает создание интерфейса настроек с визуальным редактором.
- Settings API Helper — облегчает работу с Settings API.
- Meta Box — фокусируется на мета-полях и настройках, расширяет возможности.
Использование таких инструментов может значительно сэкономить время и улучшить качество интерфейса.
Заключение
Создание страницы настроек плагина — ключевой момент в разработке. Хорошо продуманный и удобный интерфейс позволит пользователям легко настраивать функционал вашего плагина, а правильная реализация на PHP и использование WordPress Settings API обеспечит безопасность и стабильность.
Воспользуйтесь приведёнными примерами кода, чтобы быстро начать и расширять функционал по мере необходимости. Если возникнут вопросы по конкретным моментам, рекомендую изучать официальную документацию WordPress и примеры на GitHub.