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

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

Зачем создавать настройки темы в WordPress

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

Это полезно как для разработчиков, которые хотят предоставить гибкость, так и для пользователей без технических навыков.

Для реализации настроек можно использовать встроенный в WordPress API — Customizer API, который позволяет создавать интерактивные панели настроек с превью.

Основы работы с Customizer API в WordPress

Customizer API — это набор функций, который позволяет добавлять секции, настройки и контролы в панель «Внешний вид > Настроить». Это современный и удобный способ создавать настройки темы.

Основные понятия:

  • setting — хранит значение настройки в базе данных;
  • control — элемент интерфейса для выбора или ввода значения (текстовое поле, цвет, чекбокс и т.д.);
  • section — логическая группа контролов в панели.

Для добавления настроек нужно использовать хук customize_register и объект $wp_customize.

Пример добавления простой настройки цвета фона

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

function wphelper_customize_register( $wp_customize ) {
    // Добавляем секцию
    $wp_customize->add_section( 'wphelper_colors_section', array(
        'title'    => 'Цвета сайта',
        'priority' => 30,
    ) );

    // Добавляем настройку
    $wp_customize->add_setting( 'wphelper_background_color', array(
        'default'           => '#ffffff',
        'sanitize_callback' => 'sanitize_hex_color',
        'transport'         => 'refresh',
    ) );

    // Добавляем контрол для настройки
    $wp_customize->add_control( new WP_Customize_Color_Control( $wp_customize, 'wphelper_background_color_control', array(
        'label'    => 'Цвет фона сайта',
        'section'  => 'wphelper_colors_section',
        'settings' => 'wphelper_background_color',
    ) ) );
}
add_action( 'customize_register', 'wphelper_customize_register' );

В этом коде мы создали новую секцию с названием «Цвета сайта», добавили настройку wphelper_background_color с дефолтным значением белого (#ffffff) и контрол выбора цвета.

Вывод выбранного цвета в шаблоне

Чтобы применить выбранный цвет, добавим вывод стиля в header.php или в отдельный файл стилей, подключаемый динамически:

function wphelper_customizer_css() {
    $background_color = get_theme_mod( 'wphelper_background_color', '#ffffff' );
    ?>
    <style type="text/css">
        body {
            background-color: <?php echo esc_attr( $background_color ); ?>;
        }
    </style>
    <?php
}
add_action( 'wp_head', 'wphelper_customizer_css' );

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

Добавление различных типов настроек и контролов

Customizer API поддерживает множество контролов: текстовые поля, чекбоксы, выпадающие списки, радио-кнопки, загрузка изображений и даже кастомные контроли.

Рассмотрим несколько примеров.

Текстовое поле для контактного телефона

function wphelper_customize_register_phone( $wp_customize ) {
    $wp_customize->add_section( 'wphelper_contact_section', array(
        'title'    => 'Контактные данные',
        'priority' => 35,
    ) );

    $wp_customize->add_setting( 'wphelper_contact_phone', array(
        'default'           => '',
        'sanitize_callback' => 'sanitize_text_field',
    ) );

    $wp_customize->add_control( 'wphelper_contact_phone_control', array(
        'label'    => 'Телефон для связи',
        'section'  => 'wphelper_contact_section',
        'settings' => 'wphelper_contact_phone',
        'type'     => 'text',
    ) );
}
add_action( 'customize_register', 'wphelper_customize_register_phone' );

Для вывода телефона в шаблоне используйте:

echo esc_html( get_theme_mod( 'wphelper_contact_phone', '' ) );

Загрузка логотипа через Customizer

Для загрузки изображения в настройках используйте WP_Customize_Image_Control. Пример:

function wphelper_customize_register_logo( $wp_customize ) {
    $wp_customize->add_section( 'wphelper_logo_section', array(
        'title'    => 'Логотип сайта',
        'priority' => 40,
    ) );

    $wp_customize->add_setting( 'wphelper_logo', array(
        'default'           => '',
        'sanitize_callback' => 'esc_url_raw',
    ) );

    $wp_customize->add_control( new WP_Customize_Image_Control( $wp_customize, 'wphelper_logo_control', array(
        'label'    => 'Загрузить логотип',
        'section'  => 'wphelper_logo_section',
        'settings' => 'wphelper_logo',
    ) ) );
}
add_action( 'customize_register', 'wphelper_customize_register_logo' );

В шаблоне вывести логотип можно так:

$logo_url = get_theme_mod( 'wphelper_logo' );
if ( $logo_url ) {
    echo '<img src="' . esc_url( $logo_url ) . '" alt="Логотип">';
} else {
    echo '<h1>' . get_bloginfo( 'name' ) . '</h1>';
}

Использование плагинов для расширения Customizer

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

  • Kirki — мощный фреймворк для создания кастомных настроек с большим набором контролов и удобным API.
  • Customizer Remove All Parts — позволяет скрывать стандартные секции и контролы Customizer для упрощения интерфейса.
  • Advanced Custom Fields (ACF) — с плагином ACF PRO можно создавать пользовательские поля и интегрировать их с Customizer.

Например, с Kirki вы можете добавить цвет фона так:

Kirki::add_section( 'wphelper_colors_section', array(
    'title'    => 'Цвета сайта',
    'priority' => 30,
) );

Kirki::add_field( 'theme_config_id', [
    'type'        => 'color',
    'settings'    => 'wphelper_background_color',
    'label'       => 'Цвет фона сайта',
    'section'     => 'wphelper_colors_section',
    'default'     => '#ffffff',
] );

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

При добавлении настроек важно правильно очищать и валидировать данные. Используйте sanitize_callback для настройки, чтобы избежать XSS-уязвимостей.

Также используйте функции esc_html(), esc_attr(), esc_url() при выводе значений в шаблоне.

Чтобы улучшить производительность, используйте transport => postMessage и JavaScript для живого обновления превью без перезагрузки страницы в Customizer.

Пример добавления постмесседж для цвета фона

function wphelper_customize_register_live( $wp_customize ) {
    $wp_customize->get_setting( 'wphelper_background_color' )->transport = 'postMessage';
}
add_action( 'customize_register', 'wphelper_customize_register_live' );

function wphelper_customize_preview_js() {
    wp_enqueue_script( 'wphelper_customizer', get_template_directory_uri() . '/js/customizer.js', array( 'customize-preview' ), '1.0', true );
}
add_action( 'customize_preview_init', 'wphelper_customize_preview_js' );

В файле customizer.js добавьте:

( function( $ ) {
    wp.customize( 'wphelper_background_color', function( value ) {
        value.bind( function( newval ) {
            $( 'body' ).css( 'background-color', newval );
        } );
    } );
} )( jQuery );

Это обеспечит мгновенное обновление цвета фона в превью Customizer без перезагрузки.

Заключение

Создание настроек темы через Customizer API — это мощный и современный способ сделать тему гибкой и удобной для пользователя. Внимательно подходите к валидации данных, используйте готовые решения, такие как Kirki, если хотите ускорить разработку. Не забывайте про live preview и безопасность.

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

Как использовать WooCommerce REST API для управления заказами
29.01.2026
Как удалить неиспользуемые таблицы в базе данных WordPress
01.12.2025
Как сделать производительный AJAX в WordPress без admin-ajax.php
06.04.2026
Как использовать WPRemark для оценки и модерации комментариев в WordPress
28.02.2026
Как ответить на AJAX-запросы в WordPress без использования admin-ajax.php
09.12.2025