Как добавить собственные настройки в админ-панель WordPress

Добавление собственных настроек в админ-панель 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() для этого поля и обработать его в функции санитизации.

Как удалить захламление базы данных WordPress без подключения к phpMyAdmin
19.02.2026
Как создать автоматические уведомления в WordPress с помощью хуков и плагинов
07.02.2026
Как создать автоматический бэкап базы данных WordPress с помощью плагинов
16.12.2025
Как создать собственный шорткод в WordPress: пошаговое руководство
31.10.2025
WooCommerce: как добавить пользовательское поле в форму оплаты через хук
18.04.2026