Как создать динамическое тематическое оформление WordPress без плагинов

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

Зачем нужно динамическое тематическое оформление в WordPress

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

Основные задачи динамического скина:

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

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

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

Подключение альтернативных CSS в зависимости от выбранного скина

Самый простой способ — подключать разные CSS-файлы по условию. Например, создадим несколько css-файлов в папке темы:

  • style-default.css
  • style-dark.css
  • style-blue.css

Для хранения выбора скина можно использовать куки, сессию или user meta (для авторизованных).

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

function wpskins_enqueue_skin_styles() {
    $default_skin = 'default';
    // Получаем выбранный скин из куки
    $skin = isset($_COOKIE['wpskins_skin']) ? sanitize_text_field($_COOKIE['wpskins_skin']) : $default_skin;
    
    // Список доступных скинов
    $available_skins = ['default', 'dark', 'blue'];
    if (!in_array($skin, $available_skins)) {
        $skin = $default_skin;
    }
    
    // Путь к css
    $css_file = get_template_directory_uri() . "/css/style-" . $skin . ".css";
    wp_enqueue_style('wpskins-skin-style', $css_file, [], null);
}
add_action('wp_enqueue_scripts', 'wpskins_enqueue_skin_styles');

Эта функция подключит нужный CSS в зависимости от значения куки wpskins_skin. Теперь осталось создать механизм выбора скина для пользователя.

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

Добавим небольшой HTML и JavaScript, который позволит менять скин без перезагрузки страницы, а также сохранять выбор:

<div id="wpskins-selector">
  <button data-skin="default">Стандартный</button>
  <button data-skin="dark">Тёмный</button>
  <button data-skin="blue">Голубой</button>
</div>

<script>
document.getElementById('wpskins-selector').addEventListener('click', function(e) {
  if(e.target.tagName === 'BUTTON') {
    var selectedSkin = e.target.getAttribute('data-skin');
    document.cookie = 'wpskins_skin=' + selectedSkin + ';path=/;max-age=' + 60*60*24*30;
    location.reload();
  }
});
</script>

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

Как усложнить динамическое оформление: смена не только CSS, но и шаблонов

Иногда нужно менять не только стили, но и html-разметку — например, выводить разные шапки или футеры для разных скинов.

Для этого можно использовать фильтр template_include — он позволяет подменять путь к файлу шаблона.

Пример функции, которая подгружает альтернативные файлы header.php в зависимости от скина:

function wpskins_template_include_alternative( $template ) {
    $skin = isset($_COOKIE['wpskins_skin']) ? sanitize_text_field($_COOKIE['wpskins_skin']) : 'default';
    
    // Проверяем, есть ли альтернативный header
    $child_header = get_stylesheet_directory() . "/header-" . $skin . ".php";
    if ( file_exists( $child_header ) ) {
        // Подменяем основной шаблон на альтернативный
        // Для примера подменим только фронт-пейдж
        if ( is_front_page() ) {
            return $child_header;
        }
    }
    return $template;
}
add_filter('template_include', 'wpskins_template_include_alternative');

В папке темы создайте файлы header-dark.php, header-blue.php с нужной разметкой.

Использование get_template_part с динамическими именами

Для удобства можно подгружать динамические части шаблона прямо из обычного header.php:

<?php
$skin = isset($_COOKIE['wpskins_skin']) ? sanitize_text_field($_COOKIE['wpskins_skin']) : 'default';
get_template_part('template-parts/header', $skin);
?>

Так WordPress подгрузит файл template-parts/header-dark.php или template-parts/header-blue.php в зависимости от скина.

Особенности и советы при создании динамических скинов

Кэширование и производительность

При использовании динамических скинов важно помнить, что кэширование страниц и стилей может конфликтовать с куки и выбором пользователя. Рекомендуется настроить кэш-сервер или плагин так, чтобы учитывать куки wpskins_skin, либо использовать ajax-загрузку стилей.

Безопасность и валидация данных

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

Интеграция с плагинами и темами

Если вы используете темы с расширенной системой настроек, динамические скины можно дополнить настройками кастомайзера или метаполями пользователей. Например, можно сохранять выбор скина в user meta для авторизованных и подгружать по нему.

Пример расширения: динамический выбор скина через пользовательское меню в админке

Для авторизованных можно добавить страницу в админке, где они смогут выбрать скин, который будет сохраняться в user meta.

function wpskins_add_admin_menu() {
    add_menu_page('Выбор скина', 'Выбор скина', 'read', 'wpskins-settings', 'wpskins_settings_page');
}
add_action('admin_menu', 'wpskins_add_admin_menu');

function wpskins_settings_page() {
    if ( isset($_POST['wpskins_skin']) && in_array($_POST['wpskins_skin'], ['default','dark','blue'])) {
        update_user_meta(get_current_user_id(), 'wpskins_skin', sanitize_text_field($_POST['wpskins_skin']));
        echo '<div class="updated">Скин сохранён</div>';
    }
    $current_skin = get_user_meta(get_current_user_id(), 'wpskins_skin', true) ?: 'default';
    ?>
    <form method="post">
        <select name="wpskins_skin">
            <option value="default" <?php selected($current_skin, 'default'); ?>>Стандартный</option>
            <option value="dark" <?php selected($current_skin, 'dark'); ?>>Тёмный</option>
            <option value="blue" <?php selected($current_skin, 'blue'); ?>>Голубой</option>
        </select>
        <input type="submit" value="Сохранить" />
    </form>
    <?php
}

function wpskins_enqueue_skin_for_user($styles) {
    $skin = get_user_meta(get_current_user_id(), 'wpskins_skin', true);
    if ($skin && in_array($skin, ['default','dark','blue'])) {
        $styles = $skin;
    }
    return $styles;
}
// Ваша функция подключения стилей доработайте, чтобы учитывала user meta

Таким образом, можно добавлять разные методы выбора скина и применять их последовательно.

Заключение

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

Для удобства управления стилями можно использовать CSS-препроцессоры (SASS/LESS) и подключать скомпилированные файлы с разными цветовыми схемами.

Если хотите расширить возможности, обратите внимание на плагин WPGPT, который поможет автоматизировать создание кастомных стилей и шаблонов с помощью искусственного интеллекта.

Как изменить стили блоков Gutenberg в WordPress
15.04.2026
Как программно изменить заголовок страницы в WordPress
10.11.2025
WooCommerce: как запретить выставление счетов при отключенных платежах
13.07.2026
Как удалить неиспользуемые CSS и JS в WordPress
28.01.2026
Как создать динамические стили для пользователей в WordPress
06.02.2026