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

Введение в создание настроек в админ панели WordPress

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

Мы рассмотрим создание страницы настроек, регистрацию опций, добавление полей и валидацию данных. Все примеры будут с префиксом функций wp1_, чтобы не конфликтовать с другими функциями.

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

Первым шагом создадим новую страницу в меню администратора и зарегистрируем опцию для хранения настроек.

Используем хук admin_menu для добавления страницы и admin_init для регистрации опций.

function wp1_add_settings_page() {
    add_options_page(
        'Настройки WP-1',
        'Настройки WP-1',
        'manage_options',
        'wp1-settings',
        'wp1_render_settings_page'
    );
}
add_action('admin_menu', 'wp1_add_settings_page');

function wp1_register_settings() {
    register_setting('wp1_settings_group', 'wp1_option_text', array('sanitize_callback' => 'wp1_sanitize_text'));
}
add_action('admin_init', 'wp1_register_settings');

function wp1_sanitize_text($input) {
    return sanitize_text_field($input);
}

Здесь мы создаем страницу в разделе «Настройки» с идентификатором wp1-settings. Опция wp1_option_text регистрируется с функцией валидации.

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

Теперь создадим функцию wp1_render_settings_page, которая выведет HTML форму для ввода значения опции.

function wp1_render_settings_page() {
    ?>
    <div class="wrap">
        <h1>Настройки WP-1</h1>
        <form method="post" action="options.php">
            <?php
            settings_fields('wp1_settings_group');
            do_settings_sections('wp1-settings');
            ?>
            <table class="form-table">
                <tr valign="top">
                    <th scope="row">Текстовая опция</th>
                    <td><input type="text" name="wp1_option_text" value="<?php echo esc_attr(get_option('wp1_option_text')); ?>" /></td>
                </tr>
            </table>
            <?php submit_button(); ?>
        </form>
    </div>
    <?php
}

Вызовы settings_fields и do_settings_sections необходимы для безопасности и вывода секций (если добавите).

Добавление секций и полей настроек

Для более сложных настроек можно создавать секции и поля с помощью функций add_settings_section и add_settings_field. Это позволяет структурировать форму и добавлять пояснения.

function wp1_settings_init() {
    add_settings_section(
        'wp1_section_main',
        'Основные настройки',
        'wp1_section_main_cb',
        'wp1-settings'
    );

    add_settings_field(
        'wp1_option_text',
        'Текстовое поле',
        'wp1_option_text_cb',
        'wp1-settings',
        'wp1_section_main'
    );
}
add_action('admin_init', 'wp1_settings_init');

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

function wp1_option_text_cb() {
    $value = get_option('wp1_option_text', '');
    echo '<input type="text" id="wp1_option_text" name="wp1_option_text" value="' . esc_attr($value) . '" />';
}

Теперь при открытии страницы настройки появится секция с описанием и поле ввода.

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

В функции wp1_sanitize_text мы используем sanitize_text_field для очистки входящих данных. Это важно, чтобы избежать XSS-уязвимостей и сохранить в базе валидные данные.

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

Пример добавления чекбокса и селекта

Допустим, нужно добавить флажок (checkbox) и выпадающий список (select) в настройки. Регистрация и вывод полей будет выглядеть так:

function wp1_register_additional_fields() {
    add_settings_field(
        'wp1_option_checkbox',
        'Включить функцию',
        'wp1_option_checkbox_cb',
        'wp1-settings',
        'wp1_section_main'
    );
    register_setting('wp1_settings_group', 'wp1_option_checkbox', 'wp1_sanitize_checkbox');

    add_settings_field(
        'wp1_option_select',
        'Выберите вариант',
        'wp1_option_select_cb',
        'wp1-settings',
        'wp1_section_main'
    );
    register_setting('wp1_settings_group', 'wp1_option_select', 'wp1_sanitize_select');
}
add_action('admin_init', 'wp1_register_additional_fields');

function wp1_option_checkbox_cb() {
    $checked = get_option('wp1_option_checkbox') ? 'checked' : '';
    echo '<input type="checkbox" id="wp1_option_checkbox" name="wp1_option_checkbox" value="1" ' . $checked . ' />';
}

function wp1_sanitize_checkbox($input) {
    return $input == 1 ? 1 : 0;
}

function wp1_option_select_cb() {
    $options = array('option1' => 'Вариант 1', 'option2' => 'Вариант 2', 'option3' => 'Вариант 3');
    $current = get_option('wp1_option_select', 'option1');
    echo '<select id="wp1_option_select" name="wp1_option_select">';
    foreach ($options as $value => $label) {
        $selected = selected($current, $value, false);
        echo "<option value=\"$value\" $selected>$label</option>";
    }
    echo '</select>';
}

function wp1_sanitize_select($input) {
    $valid = array('option1', 'option2', 'option3');
    return in_array($input, $valid) ? $input : 'option1';
}

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

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

Чтобы использовать сохранённые настройки, достаточно получить их через get_option. Например, чтобы проверить, включена ли функция и получить текстовое значение:

$enabled = get_option('wp1_option_checkbox', 0);
$text = get_option('wp1_option_text', '');

if ($enabled) {
    echo 'Функция включена. Текст: ' . esc_html($text);
}

Это можно использовать в любых хуках или шаблонах WordPress.

Рекомендуемые плагины для расширенной работы с настройками

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

  • Advanced Custom Fields (ACF) — удобный интерфейс для создания сложных пользовательских полей и групп настроек.
  • OptionTree — фреймворк для создания панелей настроек с множеством типов полей.
  • Redux Framework — продвинутый инструмент для создания настроек с поддержкой расширений и шаблонов.

Однако знание базового API WordPress всегда пригодится для тонкой настройки и отладки.

Заключение

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

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

Как удалить пустые категории в WordPress через код
12.12.2025
Автоматическое удаление неактивных пользователей WooCommerce: практическое руководство
17.04.2026
Как использовать WP хуки для динамического управления контейнерами в WordPress
19.03.2026
Как удалить незаконченные заказы WooCommerce по дате и статусу
19.05.2026
Как удалить удалённые медиафайлы из библиотеки WordPress
04.01.2026