В жизни разработчика на WordPress часто возникает необходимость добавить собственные настройки в админ-панель сайта. Это удобно для управления функционалом темы или плагина, не прибегая к редактированию кода вручную. В этой статье разберём, как с помощью встроенных API WordPress создать свою страницу настроек, зарегистрировать опции и вывести их в интерфейсе администратора.
Что такое настройки в WordPress и зачем они нужны
Настройки — это параметры, которые сохраняются в базе данных и влияют на работу сайта или плагина. WordPress предоставляет для этого специальный API: Settings API, который упрощает регистрацию и вывод форм для управления этими параметрами в админке.
Добавление собственных настроек позволяет:
- Управлять поведением плагина или темы через удобный интерфейс;
- Избежать редактирования кода и ошибок;
- Обеспечить пользователю гибкость настройки функционала.
Рассмотрим процесс на примере создания страницы настроек с несколькими опциями.
Регистрация страницы настроек в админке WordPress
Для начала нужно создать свою страницу в меню админ-панели. Это делается с помощью функции add_menu_page или add_submenu_page. Например, добавим страницу с названием «WPDesk Настройки» в главное меню:
add_action('admin_menu', 'wpdesk_add_admin_menu');
function wpdesk_add_admin_menu() {
add_menu_page(
'WPDesk Настройки',
'WPDesk Настройки',
'manage_options',
'wpdesk-settings',
'wpdesk_settings_page_html',
'dashicons-admin-generic',
80
);
}Здесь:
manage_options— право доступа для просмотра страницы (обычно администратор);wpdesk-settings— уникальный идентификатор страницы;wpdesk_settings_page_html— функция, которая выведет HTML содержимое страницы.
Регистрация настроек и создание полей
Далее необходимо зарегистрировать свои опции и создать поля для ввода значений. Для этого используется register_setting и add_settings_section с add_settings_field.
Пример регистрации настроек:
add_action('admin_init', 'wpdesk_settings_init');
function wpdesk_settings_init() {
register_setting('wpdesk_settings_group', 'wpdesk_options');
add_settings_section(
'wpdesk_section_main',
'Основные настройки',
'wpdesk_section_main_cb',
'wpdesk-settings'
);
add_settings_field(
'wpdesk_field_text',
'Текстовое поле',
'wpdesk_field_text_cb',
'wpdesk-settings',
'wpdesk_section_main'
);
add_settings_field(
'wpdesk_field_checkbox',
'Чекбокс включения',
'wpdesk_field_checkbox_cb',
'wpdesk-settings',
'wpdesk_section_main'
);
}Функция register_setting связывает группу настроек с опциями, которые будут сохранены в базе. В данном случае вся конфигурация хранится в одном массиве wpdesk_options.
Функции колбэки для описания секции и полей:
function wpdesk_section_main_cb() {
echo '<p>Здесь можно настроить основные параметры плагина.</p>';
}
function wpdesk_field_text_cb() {
$options = get_option('wpdesk_options');
$value = isset($options['text']) ? esc_attr($options['text']) : '';
echo '<input type="text" name="wpdesk_options[text]" value="' . $value . '" />';
}
function wpdesk_field_checkbox_cb() {
$options = get_option('wpdesk_options');
$checked = isset($options['checkbox']) && $options['checkbox'] ? 'checked' : '';
echo '<input type="checkbox" name="wpdesk_options[checkbox]" ' . $checked . ' />';
}Вывод формы настроек на странице
Теперь нужно вывести форму с полями в нашей функции wpdesk_settings_page_html:
function wpdesk_settings_page_html() {
if (!current_user_can('manage_options')) {
return;
}
if (isset($_GET['settings-updated'])) {
add_settings_error('wpdesk_messages', 'wpdesk_message', 'Настройки сохранены', 'updated');
}
settings_errors('wpdesk_messages');
echo '<div class="wrap">';
echo '<h1>' . esc_html(get_admin_page_title()) . '</h1>';
echo '<form action="options.php" method="post">';
settings_fields('wpdesk_settings_group');
do_settings_sections('wpdesk-settings');
submit_button('Сохранить настройки');
echo '</form></div>';
}Функции settings_fields и do_settings_sections выводят скрытые поля и все зарегистрированные секции с полями соответственно. Кнопка submit_button создаёт кнопку сохранения.
Обработка и использование сохранённых настроек
После сохранения настройки хранятся в базе данных в опции wpdesk_options в формате массива. Для использования настроек в коде вашего плагина или темы достаточно вызвать:
$options = get_option('wpdesk_options');
$text = isset($options['text']) ? $options['text'] : '';
$checkbox_enabled = !empty($options['checkbox']);Например, вы можете включать или отключать функционал в зависимости от значения чекбокса, или выводить текст из настройки на сайте.
Дополнительные советы по безопасности и удобству
Важно проверять права пользователя, чтобы настройки видел только администратор, как показано выше. Также рекомендуется валидировать и санитизировать данные при сохранении. Для этого можно добавить параметр sanitize_callback в функцию register_setting:
register_setting('wpdesk_settings_group', 'wpdesk_options', 'wpdesk_sanitize_options');
function wpdesk_sanitize_options($input) {
$output = [];
if (isset($input['text'])) {
$output['text'] = sanitize_text_field($input['text']);
}
$output['checkbox'] = !empty($input['checkbox']) ? 1 : 0;
return $output;
}Это предотвратит сохранение нежелательных данных и повысит безопасность.
Полезные плагины для работы с настройками
Если не хочется писать настройки вручную, можно использовать плагины, которые упрощают процесс:
- Advanced Custom Fields (ACF) — позволяет создавать поля и группы полей, включая интерфейс для админа.
- Carbon Fields — PHP библиотека для создания пользовательских полей и опций с удобным API.
- Settings Pages — плагин для добавления страниц настроек без кода.
Но для максимальной гибкости и минимизации зависимостей лучше освоить собственный код, как показано выше.
Итог
Добавление собственных настроек в админ-панель — важный навык для разработчика WordPress. Используя Settings API, вы сможете создавать удобные и безопасные интерфейсы для управления параметрами плагинов и тем. Это улучшит пользовательский опыт и облегчит поддержку проектов.