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

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

Основы создания страницы настроек плагина в WordPress

Для начала нужно зарегистрировать новую страницу в меню админки. Для этого используется функция add_options_page(), которая добавляет пункт в меню "Настройки". В WordPresses-релевантном контексте мы создадим функцию, например, wordpresses_add_settings_page(), чтобы избежать конфликтов с другими плагинами.

function wordpresses_add_settings_page() {
    add_options_page(
        'Настройки плагина WordPresses', // Заголовок страницы
        'WPes Плагин', // Название в меню
        'manage_options', // Права доступа
        'wordpresses-plugin-settings', // Уникальный слаг
        'wordpresses_render_settings_page' // Функция вывода страницы
    );
}
add_action('admin_menu', 'wordpresses_add_settings_page');

В этой функции мы добавили страницу в меню "Настройки" с названием "WPes Плагин". Параметр manage_options гарантирует, что доступ к настройкам будет у администраторов.

Вывод страницы настроек

Теперь создадим функцию wordpresses_render_settings_page(), которая выведет HTML формы с полями настроек. Для простоты возьмём один параметр — текстовое поле с названием.

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

Здесь мы используем функции settings_fields() и do_settings_sections(), которые автоматически добавят скрытые поля безопасности и отобразят все зарегистрированные секции и поля.

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

Чтобы связать форму с реальными настройками и сохранить их, нужно зарегистрировать настройки, секции и поля. Для этого используем хук admin_init и функции register_setting(), add_settings_section() и add_settings_field().

function wordpresses_settings_init() {
    // Регистрируем настройку
    register_setting('wordpresses_options_group', 'wordpresses_options', 'wordpresses_options_validate');

    // Добавляем секцию
    add_settings_section(
        'wordpresses_main_section',
        'Основные параметры',
        'wordpresses_section_callback',
        'wordpresses-plugin-settings'
    );

    // Добавляем поле для ввода текста
    add_settings_field(
        'wordpresses_text_field',
        'Текстовое поле',
        'wordpresses_text_field_render',
        'wordpresses-plugin-settings',
        'wordpresses_main_section'
    );
}
add_action('admin_init', 'wordpresses_settings_init');

Функция register_setting() связывает группу настроек и массив опций, а также задаёт функцию валидации. Далее создаём функции обратного вызова для секции и поля.

Функция вывода описания секции

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

Функция вывода поля ввода

function wordpresses_text_field_render() {
    $options = get_option('wordpresses_options');
    ?>
    <input type="text" name="wordpresses_options[wordpresses_text_field]" value="<?php echo isset($options['wordpresses_text_field']) ? esc_attr($options['wordpresses_text_field']) : ''; ?>" />
    <?php
}

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

Очень важно не просто сохранить данные, а проверить их на корректность и безопасность. Функция валидации получает массив с значениями и должна вернуть очищенный массив.

function wordpresses_options_validate($input) {
    $output = array();
    if (isset($input['wordpresses_text_field'])) {
        $output['wordpresses_text_field'] = sanitize_text_field($input['wordpresses_text_field']);
    }
    return $output;
}

В этом примере мы используем sanitize_text_field() — стандартную функцию WordPress для очистки текстовых данных от лишних символов и потенциально опасного кода.

Расширение страницы настроек: добавление чекбоксов и селекторов

Один текстовый параметр — это мало. Обычно нужно предоставить пользователю возможность включать и отключать функции, выбирать варианты и т.д. Рассмотрим добавление нескольких полей разных типов.

Добавление чекбокса

add_settings_field(
    'wordpresses_checkbox_field',
    'Включить функцию',
    'wordpresses_checkbox_field_render',
    'wordpresses-plugin-settings',
    'wordpresses_main_section'
);

function wordpresses_checkbox_field_render() {
    $options = get_option('wordpresses_options');
    $checked = isset($options['wordpresses_checkbox_field']) ? checked(1, $options['wordpresses_checkbox_field'], false) : '';
    echo "<input type='checkbox' name='wordpresses_options[wordpresses_checkbox_field]' value='1' $checked />";
}

Добавление селектора (select)

add_settings_field(
    'wordpresses_select_field',
    'Выберите вариант',
    'wordpresses_select_field_render',
    'wordpresses-plugin-settings',
    'wordpresses_main_section'
);

function wordpresses_select_field_render() {
    $options = get_option('wordpresses_options');
    $selected = isset($options['wordpresses_select_field']) ? $options['wordpresses_select_field'] : '';
    ?>
    <select name="wordpresses_options[wordpresses_select_field]">
        <option value="option1" <?php selected($selected, 'option1'); ?>>Вариант 1</option>
        <option value="option2" <?php selected($selected, 'option2'); ?>>Вариант 2</option>
        <option value="option3" <?php selected($selected, 'option3'); ?>>Вариант 3</option>
    </select>
    <?php
}

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

if (isset($input['wordpresses_checkbox_field'])) {
    $output['wordpresses_checkbox_field'] = $input['wordpresses_checkbox_field'] ? 1 : 0;
} else {
    $output['wordpresses_checkbox_field'] = 0;
}

$valid_options = array('option1', 'option2', 'option3');
if (isset($input['wordpresses_select_field']) && in_array($input['wordpresses_select_field'], $valid_options)) {
    $output['wordpresses_select_field'] = $input['wordpresses_select_field'];
}

Практические советы и рекомендации

При создании страниц настроек плагина стоит учитывать несколько важных моментов:

  • Используйте префиксы в названиях функций и опций — это поможет избежать конфликтов с другими плагинами.
  • Валидация данных — всегда проверяйте и очищайте данные перед сохранением.
  • Локализация — если планируете распространять плагин, используйте функции перевода __() и _e().
  • Удобство пользователя — логично группируйте настройки, добавляйте описания и подсказки.

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

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

  • Kirki Framework — упрощает создание интерфейса настроек с визуальным редактором.
  • Settings API Helper — облегчает работу с Settings API.
  • Meta Box — фокусируется на мета-полях и настройках, расширяет возможности.

Использование таких инструментов может значительно сэкономить время и улучшить качество интерфейса.

Заключение

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

Воспользуйтесь приведёнными примерами кода, чтобы быстро начать и расширять функционал по мере необходимости. Если возникнут вопросы по конкретным моментам, рекомендую изучать официальную документацию WordPress и примеры на GitHub.

Как создать собственный шорткод в WordPress
06.11.2025
Запрет доступа по IP в WordPress через .htaccess: решение задачи защиты
27.12.2025
Как удалить неиспользуемые мета данные в WordPress для ускорения сайта
10.11.2025
Как автоматизировать процесс обновления плагинов WordPress без риска
03.01.2026
Как создать динамический фильтр товаров в WooCommerce без плагинов
09.01.2026