Как создать настройки плагинов WordPress с использованием Settings API

В этой статье мы подробно рассмотрим, как создать собственный интерфейс настроек для вашего плагина WordPress с помощью встроенного Settings API. Это позволит вам легко добавлять страницы настроек в админ-панель, сохранять и валидировать данные, а также выводить их пользователям в удобном виде.

Что такое Settings API и зачем он нужен

Settings API — это набор функций WordPress, предназначенный для упрощения создания страниц настроек в админке. Он обеспечивает стандартизированный способ регистрации, отображения и сохранения опций плагина, а также обработку ошибок и защиту данных.

Использование Settings API позволяет избежать ошибок при работе с $_POST и базой данных, а также улучшает совместимость плагина с другими расширениями и будущими версиями WordPress.

Основные компоненты Settings API

Settings API включает три ключевых компонента:

  • Настройки (Settings) — отдельные опции, которые сохраняются в базе данных.
  • Разделы (Sections) — логическое объединение настроек для удобства отображения.
  • Поля (Fields) — элементы формы, с помощью которых пользователь вводит данные.

Каждый из них нужно зарегистрировать, чтобы WordPress знал, как их обработать.

Пошаговое создание страницы настроек плагина на примере wponline_settings

Рассмотрим создание страницы настроек с тремя полями: текстовое, чекбокс и селектор.

Шаг 1. Добавляем меню в админку

add_action('admin_menu', 'wponline_add_plugin_page');
function wponline_add_plugin_page() {
    add_options_page(
        'Настройки WPOnline',
        'WPOnline Settings',
        'manage_options',
        'wponline-settings',
        'wponline_create_admin_page'
    );
}

Функция add_options_page добавляет пункт меню в раздел "Настройки".

Шаг 2. Регистрируем настройки, разделы и поля

add_action('admin_init', 'wponline_settings_init');
function wponline_settings_init() {
    register_setting('wponline_options_group', 'wponline_options', 'wponline_sanitize');

    add_settings_section(
        'wponline_section_id',
        'Основные настройки',
        'wponline_section_info',
        'wponline-settings'
    );

    add_settings_field(
        'text_field',
        'Текстовое поле',
        'wponline_text_field_callback',
        'wponline-settings',
        'wponline_section_id'
    );

    add_settings_field(
        'checkbox_field',
        'Чекбокс',
        'wponline_checkbox_field_callback',
        'wponline-settings',
        'wponline_section_id'
    );

    add_settings_field(
        'select_field',
        'Выбор из списка',
        'wponline_select_field_callback',
        'wponline-settings',
        'wponline_section_id'
    );
}

Шаг 3. Описываем функции вывода раздела и полей

function wponline_section_info() {
    echo '<p>Здесь вы можете настроить параметры плагина WPOnline.</p>';
}

function wponline_text_field_callback() {
    $options = get_option('wponline_options');
    printf(
        '<input type="text" id="text_field" name="wponline_options[text_field]" value="%s" size="40" />',
        isset($options['text_field']) ? esc_attr($options['text_field']) : ''
    );
}

function wponline_checkbox_field_callback() {
    $options = get_option('wponline_options');
    $checked = isset($options['checkbox_field']) ? checked(1, $options['checkbox_field'], false) : '';
    printf(
        '<input type="checkbox" id="checkbox_field" name="wponline_options[checkbox_field]" value="1" %s />',
        $checked
    );
}

function wponline_select_field_callback() {
    $options = get_option('wponline_options');
    $selected = isset($options['select_field']) ? $options['select_field'] : '';
    $choices = [
        'option_1' => 'Опция 1',
        'option_2' => 'Опция 2',
        'option_3' => 'Опция 3',
    ];
    echo '<select id="select_field" name="wponline_options[select_field]">';
    foreach ($choices as $value => $label) {
        printf('<option value="%s" %s>%s</option>', $value, selected($selected, $value, false), $label);
    }
    echo '</select>';
}

Шаг 4. Обработка и валидация данных

function wponline_sanitize($input) {
    $sanitized = [];

    if (isset($input['text_field'])) {
        $sanitized['text_field'] = sanitize_text_field($input['text_field']);
    }

    $sanitized['checkbox_field'] = isset($input['checkbox_field']) && $input['checkbox_field'] == 1 ? 1 : 0;

    if (isset($input['select_field'])) {
        $valid_choices = ['option_1', 'option_2', 'option_3'];
        if (in_array($input['select_field'], $valid_choices)) {
            $sanitized['select_field'] = $input['select_field'];
        }
    }

    return $sanitized;
}

Шаг 5. Вывод страницы настроек

function wponline_create_admin_page() {
    ?>
    <div class="wrap">
        <h1>Настройки WPOnline</h1>
        <form method="post" action="options.php">
            <?php
            settings_fields('wponline_options_group');
            do_settings_sections('wponline-settings');
            submit_button();
            ?>
        </form>
    </div>
    <?php
}

Примеры полезных плагинов для работы с настройками

Если вы хотите расширить функционал или упростить работу с настройками, обратите внимание на плагины:

  • Clearfy Pro — оптимизация и очистка WordPress с удобным интерфейсом настроек.
  • WPRemark — улучшение комментариев с гибкими настройками.

Советы для разработчиков при работе с Settings API

При создании настроек плагина через Settings API рекомендуется придерживаться следующих правил:

  • Используйте префиксы в именах функций и опций, чтобы избежать конфликтов с другими плагинами.
  • Обязательно валидируйте и очищайте входящие данные через функции sanitize_*, чтобы не допустить уязвимостей.
  • Добавляйте подсказки и описания к полям, чтобы пользователям было понятно, что они настраивают.
  • Тестируйте работу настроек на разных версиях WordPress и с разными темами.

Правильная организация настроек улучшит пользовательский опыт и облегчит поддержку вашего плагина.

Как установить и настроить подключение к внешней базе данных в WordPress
20.04.2026
Как избежать проблем с переносом WordPress между серверами
03.12.2025
Как удалить файлы из медиабиблиотеки WordPress правильно
10.11.2025
Как удалить пустые мета-данные в WordPress: практическое руководство
10.02.2026
Как удалить пустые метаданные в WordPress для оптимизации базы данных
06.03.2026