Одной из частых задач при разработке плагинов для WordPress является добавление собственных настроек, которые будут доступны в админке. Это необходимо для того, чтобы дать пользователю возможность конфигурировать работу плагина без правки кода. В этой статье мы подробно разберём, как создать собственную страницу настроек, зарегистрировать опции, вывести поля и корректно сохранить данные.
Зачем нужны собственные настройки в плагинах WordPress
Любой плагин, который выполняет полезную функцию, часто требует гибкой настройки. Без удобного интерфейса администратор вынужден лезть в код или базу данных, что неудобно и небезопасно. Собственные настройки позволяют:
- Изменять параметры работы плагина с панели администрирования
- Обеспечить сохранность данных через стандартный API WordPress
- Упростить поддержку и развитие плагина
Реализация настроек должна быть максимально понятной и соответствовать стандартам WordPress, чтобы не ломать логику и не создавать конфликтов.
Регистрация страницы настроек и опций
Для начала нам нужно создать страницу в меню админки и зарегистрировать опцию, которая будет хранить настройки. Используем хуки admin_menu и admin_init. Рассмотрим пример с префиксом cyrtolat для функций и опций.
add_action('admin_menu', 'cyrtolat_add_settings_page');
function cyrtolat_add_settings_page() {
add_options_page(
'Настройки плагина Cyrtolat',
'Cyrtolat Settings',
'manage_options',
'cyrtolat-settings',
'cyrtolat_render_settings_page'
);
}
add_action('admin_init', 'cyrtolat_register_settings');
function cyrtolat_register_settings() {
register_setting('cyrtolat_options_group', 'cyrtolat_options', 'cyrtolat_options_validate');
add_settings_section('cyrtolat_main_section', 'Основные настройки', 'cyrtolat_section_text', 'cyrtolat-settings');
add_settings_field('cyrtolat_text_string', 'Текстовая строка', 'cyrtolat_setting_string', 'cyrtolat-settings', 'cyrtolat_main_section');
}
Здесь мы добавляем страницу в раздел «Настройки» и регистрируем опцию cyrtolat_options, которая будет хранить все параметры в виде массива.
Вывод полей на странице настроек
Для вывода страницы и полей определим функции обратного вызова. Создадим функцию для отображения описания секции, поля ввода и самой страницы.
function cyrtolat_section_text() {
echo '<p>Настройте параметры плагина Cyrtolat ниже.</p>';
}
function cyrtolat_setting_string() {
$options = get_option('cyrtolat_options');
$value = isset($options['text_string']) ? esc_attr($options['text_string']) : '';
echo "<input id='cyrtolat_text_string' name='cyrtolat_options[text_string]' type='text' value='$value' />";
}
function cyrtolat_render_settings_page() {
?>
<div class="wrap">
<h1>Настройки плагина Cyrtolat</h1>
<form action="options.php" method="post">
<?php settings_fields('cyrtolat_options_group'); ?>
<?php do_settings_sections('cyrtolat-settings'); ?>
<?php submit_button(); ?>
</form>
</div>
<?php
}
Таким образом мы создаём страницу с формой, где WordPress сам заботится о безопасности и сохранении данных.
Валидация и очистка данных
Очень важно правильно обрабатывать входные данные, чтобы избежать ошибок и атак. Функция валидации вызывается автоматически при сохранении настроек.
function cyrtolat_options_validate($input) {
$new_input = array();
if (isset($input['text_string'])) {
$new_input['text_string'] = sanitize_text_field($input['text_string']);
}
return $new_input;
}
В примере мы используем функцию sanitize_text_field, чтобы очистить текст от нежелательных символов и скриптов. При добавлении других типов полей используйте соответствующие функции очистки.
Пример добавления чекбокса и выпадающего списка
Чтобы расширить настройки, добавим поле чекбокса и выпадающего списка. Для этого в функции регистрации добавим новые поля:
add_settings_field('cyrtolat_checkbox', 'Включить функцию', 'cyrtolat_setting_checkbox', 'cyrtolat-settings', 'cyrtolat_main_section');
add_settings_field('cyrtolat_select', 'Выберите вариант', 'cyrtolat_setting_select', 'cyrtolat-settings', 'cyrtolat_main_section');
function cyrtolat_setting_checkbox() {
$options = get_option('cyrtolat_options');
$checked = isset($options['checkbox']) && $options['checkbox'] ? 'checked' : '';
echo "<input type='checkbox' id='cyrtolat_checkbox' name='cyrtolat_options[checkbox]' value='1' $checked />";
}
function cyrtolat_setting_select() {
$options = get_option('cyrtolat_options');
$selected = isset($options['select']) ? $options['select'] : '';
$items = array('option1' => 'Вариант 1', 'option2' => 'Вариант 2', 'option3' => 'Вариант 3');
echo "<select id='cyrtolat_select' name='cyrtolat_options[select]'>";
foreach ($items as $key => $label) {
$sel = selected($selected, $key, false);
echo "<option value='$key' $sel>$label</option>";
}
echo "</select>";
}
Не забудьте расширить функцию валидации так, чтобы она корректно обрабатывала новые поля:
if (isset($input['checkbox'])) {
$new_input['checkbox'] = $input['checkbox'] ? 1 : 0;
} else {
$new_input['checkbox'] = 0;
}
if (isset($input['select']) && in_array($input['select'], array('option1','option2','option3'))) {
$new_input['select'] = $input['select'];
}
Реальные примеры полезных плагинов с настройками
Для вдохновения можно посмотреть как сделали настройки известные плагины:
- Contact Form 7 — содержит несколько страниц с разными опциями для форм
- WooCommerce — огромный набор настроек для магазина
- Akismet — простая страница с ключом API и дополнительными опциями
Обратите внимание, что все они используют стандартные API WordPress, что повышает совместимость и удобство.
Безопасность и лучшие практики при создании настроек
При работе с настройками важно помнить о безопасности:
- Используйте
register_settingс функцией валидации для очистки данных - Выводите данные с помощью функций
esc_attr,esc_htmlдля предотвращения XSS - Проверяйте права пользователя с помощью
current_user_can('manage_options') - Используйте nonce в формах, WordPress делает это за вас через
settings_fields
При соблюдении этих правил ваш плагин будет устойчив к распространённым атакам и ошибкам.
Заключение
Создание собственных настроек для плагина WordPress — это несложный, но важный этап разработки. Используя стандартные функции API, вы обеспечите удобство для пользователя и безопасность. В статье представлен полный пример с формой, полями, валидацией и выводом на страницу настроек. Такой подход поможет создавать качественные и гибкие плагины.