В этой статье мы подробно разберем, как добавить страницу настроек для вашего плагина в WordPress. Если вы разрабатываете плагин, очень важно предоставить пользователю удобный интерфейс для изменения параметров. Мы рассмотрим, как зарегистрировать страницу настроек, создать поля, обработать ввод и сохранить данные.
Зачем нужны настройки плагина в WordPress
Наличие страницы настроек позволяет пользователям гибко настраивать поведение плагина без необходимости править код. Это повышает удобство и расширяет аудиторию вашего продукта. При этом важно соблюдать стандарты безопасности, чтобы предотвратить уязвимости.
Кроме того, WordPress предоставляет API для создания настроек, что упрощает процесс и обеспечивает совместимость с будущими версиями платформы.
Создание страницы настроек плагина
Для начала зарегистрируем меню в админ-панели. Используйте хук admin_menu, чтобы добавить новую страницу.
function wpcommunity_add_plugin_page() {
add_options_page(
'Настройки WPCommunity', // Заголовок страницы
'WPCommunity', // Название меню
'manage_options', // Права доступа
'wpcommunity_settings', // slug страницы
'wpcommunity_render_settings_page' // Колбэк для вывода
);
}
add_action('admin_menu', 'wpcommunity_add_plugin_page');Функция add_options_page добавляет страницу настроек в меню «Настройки».
Регистрация настроек и создание полей
Теперь зарегистрируем настройки и добавим поля с помощью API настроек WordPress. Для этого используем хук admin_init:
function wpcommunity_register_settings() {
register_setting('wpcommunity_options_group', 'wpcommunity_option_name', 'sanitize_text_field');
add_settings_section(
'wpcommunity_setting_section',
'Основные настройки',
'wpcommunity_section_callback',
'wpcommunity_settings'
);
add_settings_field(
'wpcommunity_text_field',
'Текстовое поле',
'wpcommunity_text_field_callback',
'wpcommunity_settings',
'wpcommunity_setting_section'
);
}
add_action('admin_init', 'wpcommunity_register_settings');Здесь мы регистрируем новую опцию wpcommunity_option_name, создаем секцию и поле с колбэками для вывода описания и поля ввода.
Колбэки для вывода секции и поля
function wpcommunity_section_callback() {
echo '<p>Настройки плагина WPCommunity.</p>';
}
function wpcommunity_text_field_callback() {
$value = get_option('wpcommunity_option_name', '');
echo '<input type="text" id="wpcommunity_text_field" name="wpcommunity_option_name" value="' . esc_attr($value) . '" />';
}Таким образом мы выводим описание и текстовое поле для ввода значения.
Вывод страницы настроек
Теперь реализуем функцию wpcommunity_render_settings_page, которая выведет форму с полями.
function wpcommunity_render_settings_page() {
?>
<div class="wrap">
<h1>Настройки плагина WPCommunity</h1>
<form method="post" action="options.php">
<?php
settings_fields('wpcommunity_options_group');
do_settings_sections('wpcommunity_settings');
submit_button();
?>
</form>
</div>
<?php
}Функция settings_fields выводит скрытые поля безопасности, do_settings_sections выводит зарегистрированные секции и поля, а submit_button создает кнопку отправки.
Санитизация и безопасность данных
При регистрации настроек мы указали функцию sanitize_text_field для очистки входящих данных. Вы можете использовать свои функции санитизации, если ожидаете другой формат данных.
Также важно проверять права пользователя при выводе и сохранении настроек. В нашем примере мы задали manage_options, что ограничивает доступ администраторам.
Расширение: добавление чекбокса и селекта
Добавим два дополнительных поля: чекбокс и селект с вариантами.
add_settings_field(
'wpcommunity_checkbox',
'Включить функцию',
'wpcommunity_checkbox_callback',
'wpcommunity_settings',
'wpcommunity_setting_section'
);
add_settings_field(
'wpcommunity_select',
'Выбор опции',
'wpcommunity_select_callback',
'wpcommunity_settings',
'wpcommunity_setting_section'
);
function wpcommunity_checkbox_callback() {
$option = get_option('wpcommunity_checkbox_option', '');
$checked = checked(1, $option, false);
echo '<input type="checkbox" id="wpcommunity_checkbox" name="wpcommunity_checkbox_option" value="1" ' . $checked . ' />';
}
function wpcommunity_select_callback() {
$option = get_option('wpcommunity_select_option', 'option1');
echo '<select id="wpcommunity_select" name="wpcommunity_select_option">';
$options = ['option1' => 'Опция 1', 'option2' => 'Опция 2', 'option3' => 'Опция 3'];
foreach ($options as $key => $label) {
$selected = selected($option, $key, false);
echo "<option value=\"$key\" $selected>$label</option>";
}
echo '</select>';
}Не забудьте зарегистрировать эти опции с функцией санитизации:
register_setting('wpcommunity_options_group', 'wpcommunity_checkbox_option', 'wpcommunity_sanitize_checkbox');
register_setting('wpcommunity_options_group', 'wpcommunity_select_option', 'wpcommunity_sanitize_select');
function wpcommunity_sanitize_checkbox($input) {
return $input == 1 ? 1 : 0;
}
function wpcommunity_sanitize_select($input) {
$valid = ['option1', 'option2', 'option3'];
return in_array($input, $valid) ? $input : 'option1';
}Использование настроек в плагине
После сохранения настроек вы можете получить их значения с помощью get_option в любом месте вашего плагина:
$text = get_option('wpcommunity_option_name', 'дефолт');
$enabled = get_option('wpcommunity_checkbox_option', 0);
$select = get_option('wpcommunity_select_option', 'option1');Далее можно реализовать логику, которая зависит от этих параметров.
Заключение
Теперь у вас есть полное представление, как создать страницу настроек для вашего плагина в WordPress. Используйте этот шаблон, чтобы добавить удобный интерфейс, улучшить опыт пользователей и расширить возможности вашего расширения.
Не забывайте про безопасность и проверку данных, а также про права доступа. В дальнейшем можно добавить поддержку кастомных типов полей, визуальных редакторов и других элементов.