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

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

Что такое Settings API и почему его стоит использовать

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

Используя Settings API, вы автоматически получаете:

  • Регистрируемые настройки с валидацией;
  • Автоматическое сохранение и загрузку данных;
  • Удобную структуру для отображения настроек в админке;
  • Поддержку проверки прав доступа.

Это значительно упрощает поддержку и развитие плагина.

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

Первый шаг — добавить страницу в меню админки и зарегистрировать секции и поля настроек. Ниже пример функции wpinru_register_plugin_settings, которую нужно повесить на хук admin_menu и admin_init:

function wpinru_register_plugin_settings() {
    // Добавляем страницу настроек в меню
    add_options_page(
        'Настройки моего плагина',
        'Мой плагин',
        'manage_options',
        'wpinru-plugin-settings',
        'wpinru_plugin_settings_page'
    );

    // Регистрируем настройки
    register_setting('wpinru_plugin_options_group', 'wpinru_plugin_options', 'wpinru_sanitize_options');

    // Добавляем секцию
    add_settings_section(
        'wpinru_main_section',
        'Основные настройки',
        'wpinru_main_section_callback',
        'wpinru-plugin-settings'
    );

    // Добавляем поля
    add_settings_field(
        'wpinru_text_field',
        'Текстовое поле',
        'wpinru_text_field_callback',
        'wpinru-plugin-settings',
        'wpinru_main_section'
    );

    add_settings_field(
        'wpinru_checkbox',
        'Чекбокс',
        'wpinru_checkbox_callback',
        'wpinru-plugin-settings',
        'wpinru_main_section'
    );
}
add_action('admin_menu', 'wpinru_register_plugin_settings');
add_action('admin_init', 'wpinru_register_plugin_settings');

Здесь мы создали страницу настроек в разделе «Настройки» с двумя полями: текстовым и чекбоксом.

Колбэки для секции и полей

Для вывода описания секции и полей нужны callback-функции:

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

function wpinru_text_field_callback() {
    $options = get_option('wpinru_plugin_options');
    $value = isset($options['wpinru_text_field']) ? esc_attr($options['wpinru_text_field']) : '';
    echo '<input type="text" name="wpinru_plugin_options[wpinru_text_field]" value="' . $value . '" size="40">';
}

function wpinru_checkbox_callback() {
    $options = get_option('wpinru_plugin_options');
    $checked = isset($options['wpinru_checkbox']) && $options['wpinru_checkbox'] ? 'checked' : '';
    echo '<input type="checkbox" name="wpinru_plugin_options[wpinru_checkbox]" value="1" ' . $checked . '> Включить функцию';
}

Создание страницы настроек и обработка сохранения

Страница настроек должна содержать форму, которая отправляет данные на options.php — стандартный обработчик WordPress для настроек.

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

Вызов settings_fields добавляет скрытые поля безопасности. do_settings_sections выводит все зарегистрированные секции и поля. Кнопка submit_button создаёт кнопку для сохранения.

Валидация и очистка данных настроек

Чтобы защитить и правильно сохранить данные, реализуем функцию очистки и валидации:

function wpinru_sanitize_options($input) {
    $output = array();

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

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

    return $output;
}

Эта функция гарантирует, что текстовое поле содержит только безопасный текст, а чекбокс будет либо 1, либо 0.

Добавление дополнительных типов полей настроек

Выпадающий список (select)

Для выбора из нескольких вариантов удобно использовать выпадающий список. Пример добавления поля:

add_settings_field(
    'wpinru_select_field',
    'Выбор опции',
    'wpinru_select_field_callback',
    'wpinru-plugin-settings',
    'wpinru_main_section'
);

function wpinru_select_field_callback() {
    $options = get_option('wpinru_plugin_options');
    $selected = isset($options['wpinru_select_field']) ? $options['wpinru_select_field'] : '';
    $choices = array('option1' => 'Опция 1', 'option2' => 'Опция 2', 'option3' => 'Опция 3');

    echo '<select name="wpinru_plugin_options[wpinru_select_field]">';
    foreach ($choices as $value => $label) {
        $sel = selected($selected, $value, false);
        echo "<option value=\"$value\" $sel>$label</option>";
    }
    echo '</select>';
}

Не забудьте добавить обработку этого поля в функцию валидации.

Поле цвета

Для выбора цвета можно использовать стандартный HTML5 input type="color". Пример:

add_settings_field(
    'wpinru_color_field',
    'Цвет фона',
    'wpinru_color_field_callback',
    'wpinru-plugin-settings',
    'wpinru_main_section'
);

function wpinru_color_field_callback() {
    $options = get_option('wpinru_plugin_options');
    $color = isset($options['wpinru_color_field']) ? esc_attr($options['wpinru_color_field']) : '#ffffff';
    echo '<input type="color" name="wpinru_plugin_options[wpinru_color_field]" value="' . $color . '">';
}

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

После сохранения настроек получить значения можно через get_option:

$options = get_option('wpinru_plugin_options');
$text = isset($options['wpinru_text_field']) ? $options['wpinru_text_field'] : '';
$enabled = !empty($options['wpinru_checkbox']);

Далее эти значения можно использовать для управления поведением плагина, например, для включения или отключения функций.

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

Если хочется упростить создание настроек, можно использовать готовые библиотеки и плагины, например:

  • Clearfy Pro (https://wpshop.ru/clearfy-pro/?utm_source=wpin.ru&utm_medium=article&utm_campaign=kak-sozdat-nastroyki-plaginov-wordpress-s-primerami-koda) — для оптимизации и настройки безопасности сайта;
  • WPCommunity (https://wpshop.ru/wpcommunity/?utm_source=wpin.ru&utm_medium=article&utm_campaign=kak-sozdat-nastroyki-plaginov-wordpress-s-primerami-koda) — если создаёте плагин с социальной составляющей;
  • Expert Review (https://wpshop.ru/expert-review/?utm_source=wpin.ru&utm_medium=article&utm_campaign=kak-sozdat-nastroyki-plaginov-wordpress-s-primerami-koda) — для добавления отзывов с настройками.

Они помогут быстро добавить нужный функционал без лишних усилий.

Советы по безопасности и удобству

При создании настроек обязательно проверяйте права пользователя через current_user_can('manage_options'), чтобы не допустить несанкционированного доступа. Используйте функции очистки данных и escape при выводе.

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

Как добавить автоматическое удаление спам комментариев в WordPress
21.12.2025
WooCommerce не отображает варианты товаров: практическое руководство
06.05.2026
Как отключить автосохранение в WordPress
03.01.2026
WooCommerce: отключение автоматического обновления корзины при изменении товаров
01.07.2026
Автоматическое удаление товаров из корзины WooCommerce при отсутствии на складе
29.04.2026