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

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

Почему важно хранить настройки в базе данных WordPress

Хранение настроек плагина в базе данных WordPress — это стандартный и надёжный способ обеспечить постоянство параметров между сессиями и доступность для администратора сайта. WordPress предоставляет удобные функции для сохранения и получения опций, такие как get_option и update_option. Использование этих функций гарантирует совместимость с другими плагинами и темами, а также с системой резервного копирования.

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

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

Для начала добавим новую страницу настроек в меню WordPress. Это делается с помощью функции add_options_page или add_menu_page. В примере ниже создадим страницу с названием "WPDO Настройки" в разделе "Настройки" WordPress.

function wpdo_add_settings_page() {
    add_options_page(
        'Настройки WPDO', // Заголовок страницы
        'WPDO Настройки',  // Название меню
        'manage_options',  // Права доступа
        'wpdo-settings',  // Слаг страницы
        'wpdo_render_settings_page' // Функция вывода
    );
}
add_action('admin_menu', 'wpdo_add_settings_page');

Функция wpdo_render_settings_page будет отвечать за вывод HTML формы настроек.

Вывод формы с сохранением данных

Для удобства и безопасности используем API WordPress для настроек — register_setting, add_settings_section и add_settings_field. Это обеспечит автоматическую валидацию и защиту от CSRF.

function wpdo_register_settings() {
    register_setting('wpdo_options_group', 'wpdo_options', 'wpdo_sanitize_options');

    add_settings_section(
        'wpdo_main_section',
        'Основные настройки',
        'wpdo_main_section_cb',
        'wpdo-settings'
    );

    add_settings_field(
        'wpdo_text_option',
        'Текстовая опция',
        'wpdo_text_option_cb',
        'wpdo-settings',
        'wpdo_main_section'
    );
}
add_action('admin_init', 'wpdo_register_settings');

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

function wpdo_text_option_cb() {
    $options = get_option('wpdo_options');
    $value = isset($options['text_option']) ? esc_attr($options['text_option']) : '';
    echo '<input type="text" name="wpdo_options[text_option]" value="' . $value . '" />';
}

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

Теперь функция wpdo_render_settings_page выводит форму, которая отправляет данные на обработку WordPress:

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

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

Для более сложных настроек часто нужны разные типы полей: чекбоксы, выпадающие списки, текстовые области и цветовые селекторы.

Например, добавим чекбокс для включения функции:

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

add_settings_field(
    'wpdo_checkbox_option',
    'Включить функцию',
    'wpdo_checkbox_option_cb',
    'wpdo-settings',
    'wpdo_main_section'
);

function wpdo_sanitize_options($input) {
    $output = array();
    if (isset($input['text_option'])) {
        $output['text_option'] = sanitize_text_field($input['text_option']);
    }
    $output['checkbox_option'] = !empty($input['checkbox_option']) ? 1 : 0;
    return $output;
}

Таким образом, можно расширять интерфейс настроек без потери удобства и безопасности.

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

После того, как настройки сохранены в базе, чтобы использовать их в логике плагина, просто вызовите get_option и получите нужные параметры.

$wpdo_options = get_option('wpdo_options');
if (!empty($wpdo_options['checkbox_option'])) {
    // Логика при включённой функции
}

$text_value = isset($wpdo_options['text_option']) ? $wpdo_options['text_option'] : '';
// Используем $text_value где нужно

Важно всегда проверять наличие настроек и использовать функции очистки данных перед выводом.

Пример использования плагина Clearfy Pro для расширенного управления настройками

Если вы хотите облегчить работу с настройками и оптимизацией сайта, рекомендую обратить внимание на плагин Clearfy Pro. Он предоставляет множество готовых опций для оптимизации и безопасности, а также удобный интерфейс.

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

Резюме

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

Как динамически удалить стили и скрипты в WordPress для оптимизации загрузки
15.04.2026
WooCommerce: как установить и настроить отложенную оплату
08.05.2026
Как изменить вывод CSS-классов в меню WordPress
12.11.2025
Как создать и использовать блок Gutenberg в WordPress с примером кода
18.03.2026
WooCommerce: отладка проблем с отправкой писем после оформления заказа
22.04.2026