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

Если вы разрабатываете плагин для WordPress, одна из обязательных задач — это создать удобный интерфейс для настройки параметров плагина. В WordPress для этого обычно используется API опций (options API), позволяющий безопасно сохранять и получать данные из таблицы wp_options. В этой статье мы разберём, как правильно создать страницу настроек плагина, хранить данные в options и работать с формой, чтобы обеспечить безопасность и удобство использования.

Почему именно options API и где хранить настройки плагина

Options API — это встроенный механизм WordPress для хранения настроек и параметров. Данные сохраняются в таблице wp_options, что обеспечивает простоту доступа и совместимость с большинством хостингов и конфигураций. Альтернативой являются пользовательские таблицы базы данных, но для большинства задач options API — оптимальный выбор.

Использование options упрощает перенос и резервное копирование настроек, позволяет легко получать и менять параметры с помощью функций get_option и update_option.

Важно придерживаться единообразия в именовании опций, чтобы избежать конфликтов с другими плагинами. Хорошая практика — использовать префиксы, например, wpin_ для вашего плагина.

Создание страницы настроек в админке WordPress

Для добавления страницы настроек в меню админки WordPress используется функция add_options_page или add_menu_page. Рекомендуется регистрировать страницу в хуке admin_menu.

add_action('admin_menu', 'wpin_register_settings_page');

function wpin_register_settings_page() {
    add_options_page(
        'Настройки моего плагина',
        'WPIN Настройки',
        'manage_options',
        'wpin-settings',
        'wpin_render_settings_page'
    );
}

В данном примере создаётся страница настроек в разделе «Настройки» с заголовком «WPIN Настройки».

Вывод формы настроек

Функция wpin_render_settings_page отвечает за вывод HTML формы с настройками. Для обработки и сохранения данных используем функции WordPress: settings_fields, do_settings_sections и submit_button.

function wpin_render_settings_page() {
    ?>
    <div class="wrap">
        <h1>Настройки моего плагина</h1>
        <form method="post" action="options.php">
            <?php
            settings_fields('wpin_options_group');
            do_settings_sections('wpin-settings');
            submit_button();
            ?>
        </form>
    </div>
    <?php
}

Регистрация настроек и полей

Чтобы WordPress знал, какие настройки обрабатывать и сохранять, нужно их зарегистрировать в хуке admin_init. Также здесь описываем секции и поля формы.

add_action('admin_init', 'wpin_register_settings');

function wpin_register_settings() {
    register_setting('wpin_options_group', 'wpin_options', 'wpin_sanitize_options');

    add_settings_section(
        'wpin_main_section',
        'Основные настройки',
        'wpin_main_section_callback',
        'wpin-settings'
    );

    add_settings_field(
        'wpin_text_field',
        'Текстовое поле',
        'wpin_text_field_callback',
        'wpin-settings',
        'wpin_main_section'
    );

    add_settings_field(
        'wpin_checkbox_field',
        'Чекбокс',
        'wpin_checkbox_field_callback',
        'wpin-settings',
        'wpin_main_section'
    );
}

function wpin_main_section_callback() {
    echo '<p>Настройте параметры плагина ниже.</p>';
}

function wpin_text_field_callback() {
    $options = get_option('wpin_options');
    $value = isset($options['text_field']) ? esc_attr($options['text_field']) : '';
    echo "<input type='text' name='wpin_options[text_field]' value='$value' />";
}

function wpin_checkbox_field_callback() {
    $options = get_option('wpin_options');
    $checked = isset($options['checkbox_field']) && $options['checkbox_field'] === '1' ? 'checked' : '';
    echo "<input type='checkbox' name='wpin_options[checkbox_field]' value='1' $checked />";
}

Обратите внимание, что все поля сгруппированы в массив wpin_options, что упрощает хранение и обработку.

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

Для безопасности и корректной работы обязательно нужно фильтровать и валидировать данные перед сохранением. Функция-санитайзер передается третьим параметром в register_setting.

function wpin_sanitize_options($input) {
    $output = [];

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

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

    return $output;
}

Здесь мы используем sanitize_text_field для текстового поля и явно устанавливаем значение чекбокса в '1' или '0'. Это предотвращает сохранение некорректных или вредоносных данных.

Использование сохранённых настроек в коде плагина

После того, как настройки сохранены, можно получать их в любом месте плагина при помощи get_option('wpin_options'). Например:

$options = get_option('wpin_options');
$text = isset($options['text_field']) ? $options['text_field'] : 'Значение по умолчанию';

if (!empty($options['checkbox_field']) && $options['checkbox_field'] === '1') {
    // Выполняем логику если чекбокс отмечен
}

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

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

Если вы хотите изучить готовые решения, обратите внимание на плагины как Clearfy Pro — в нем очень продуманная система настроек с использованием options API и расширенных функций WordPress.

Итоги и рекомендации

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

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

Как установить ограничение на размер загружаемых файлов в WordPress
17.02.2026
WooCommerce не обновляет стоимость в корзине: как исправить
19.04.2026
Как удалить старые посты из очереди кронов в WordPress
08.02.2026
WooCommerce: автоматическое обновление стоимости в корзине при изменении атрибутов товара
13.06.2026
Как удалить неиспользуемые шорткоды в WordPress
11.03.2026