Как добавить поддержку Dark Mode в тему WordPress

В последние годы тёмный режим (Dark Mode) становится всё более популярным среди пользователей, поскольку он снижает нагрузку на глаза и экономит заряд батареи на мобильных устройствах. В этой статье мы подробно разберём, как добавить поддержку Dark Mode в тему WordPress, используя современные методы и лучшие практики. Вы увидите примеры CSS, JavaScript и PHP-кода, а также рекомендации по совместимости с плагинами и оптимизации.

Почему стоит добавить Dark Mode в тему WordPress

Тёмный режим улучшает пользовательский опыт, особенно при работе в условиях низкой освещённости. Многие современные сайты и приложения уже предлагают пользователям переключение между светлой и тёмной темами. Внедрение Dark Mode в вашу тему позволит:

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

Давайте рассмотрим, как это реализовать с технической точки зрения.

Добавление базовой поддержки Dark Mode через CSS

Самый простой способ — использовать медиа-запрос prefers-color-scheme, который позволяет автоматически переключаться на тёмный режим, если пользователь настроил систему или браузер соответствующим образом.

/* Светлая тема по умолчанию */
body {
    background-color: #fff;
    color: #111;
}

/* Тёмная тема */
@media (prefers-color-scheme: dark) {
    body {
        background-color: #121212;
        color: #eee;
    }
    a {
        color: #9ecfff;
    }
    /* Добавьте другие стили для тёмного режима */
}

Этот метод не требует JavaScript и позволяет автоматически подстраиваться под системные настройки. Но что делать, если вы хотите предоставить пользователю возможность переключать тему вручную?

Реализация переключателя Dark Mode с сохранением выбора пользователя

Для переключения между светлой и тёмной темами на сайте создадим кнопку, которая будет менять класс у <body> и сохранять выбор в localStorage. Это позволит при обновлении страницы сохранить выбранный режим.

HTML и JavaScript для переключателя

<button id="wp-theme-toggle-dark-mode">Тёмный режим</button>

<script>
document.addEventListener('DOMContentLoaded', function() {
    const toggleButton = document.getElementById('wp-theme-toggle-dark-mode');
    const body = document.body;

    // Функция применения темы
    function wpThemeApplyDarkMode(enabled) {
        if (enabled) {
            body.classList.add('wp-theme-dark-mode');
        } else {
            body.classList.remove('wp-theme-dark-mode');
        }
    }

    // Загрузка настройки из localStorage
    const darkModeSetting = localStorage.getItem('wpThemeDarkMode');
    if (darkModeSetting === 'enabled') {
        wpThemeApplyDarkMode(true);
    } else if (darkModeSetting === 'disabled') {
        wpThemeApplyDarkMode(false);
    } else {
        // Если нет сохранённого значения, применяем системное
        const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
        wpThemeApplyDarkMode(prefersDark);
    }

    // Обработчик кнопки
    toggleButton.addEventListener('click', function() {
        const isDark = body.classList.toggle('wp-theme-dark-mode');
        localStorage.setItem('wpThemeDarkMode', isDark ? 'enabled' : 'disabled');
    });
});
</script>

CSS для класса тёмной темы

.wp-theme-dark-mode {
    background-color: #121212;
    color: #eee;
}
.wp-theme-dark-mode a {
    color: #9ecfff;
}
/* Добавьте остальные стили для темной темы */

Обратите внимание, что базовые стили для body (светлая тема) задаются в обычном CSS, а тёмная тема — через класс wp-theme-dark-mode, который мы динамически добавляем или убираем.

Интеграция Dark Mode в тему WordPress: добавление в functions.php

Чтобы подключить стили и скрипты корректно, добавим их через functions.php вашей темы. Это позволит избежать проблем с кэшированием и конфликтами.

function wp_theme_enqueue_dark_mode_assets() {
    wp_enqueue_style('wp-theme-dark-mode-style', get_template_directory_uri() . '/css/dark-mode.css', [], '1.0');

    wp_enqueue_script('wp-theme-dark-mode-script', get_template_directory_uri() . '/js/dark-mode-toggle.js', [], '1.0', true);
}
add_action('wp_enqueue_scripts', 'wp_theme_enqueue_dark_mode_assets');

Создайте файлы dark-mode.css и dark-mode-toggle.js в папках css и js вашей темы соответственно и поместите туда код из примеров выше.

Поддержка Dark Mode в популярных плагинах и библиотеках

Если вы используете плагины с пользовательскими интерфейсами (например, Clearfy Pro) или визуальные конструкторы, важно проверить, как они работают с тёмной темой. Некоторые плагины имеют собственные настройки для Dark Mode или позволяют добавлять кастомные стили.

Для плагинов без встроенной поддержки рекомендуем:

  • Использовать CSS-переменные для цветов, чтобы централизованно менять цветовую схему.
  • Добавлять стили плагинов внутри блока .wp-theme-dark-mode, чтобы не ломать светлую тему.
  • Тестировать переключение тем с включёнными плагинами на разных страницах.

Продвинутые возможности: переключение Dark Mode через PHP и AJAX

Если вы хотите хранить выбор пользователя на сервере (например, в профиле пользователя), можно реализовать переключение с помощью AJAX и PHP. Это особенно полезно для сайтов с регистрацией.

Пример AJAX-обработчика в functions.php

add_action('wp_ajax_wp_theme_toggle_dark_mode', 'wp_theme_toggle_dark_mode_handler');
function wp_theme_toggle_dark_mode_handler() {
    if (!is_user_logged_in()) {
        wp_send_json_error('User not logged in');
        wp_die();
    }
    $enabled = isset($_POST['enabled']) && $_POST['enabled'] === 'true' ? true : false;
    $user_id = get_current_user_id();
    update_user_meta($user_id, 'wp_theme_dark_mode', $enabled ? 1 : 0);
    wp_send_json_success(['enabled' => $enabled]);
    wp_die();
}

Загрузка темы при входе пользователя

function wp_theme_apply_user_dark_mode() {
    if (is_user_logged_in()) {
        $user_id = get_current_user_id();
        $enabled = get_user_meta($user_id, 'wp_theme_dark_mode', true);
        if ($enabled == 1) {
            echo '<script>document.body.classList.add("wp-theme-dark-mode");</script>';
        }
    }
}
add_action('wp_footer', 'wp_theme_apply_user_dark_mode');

В JavaScript нужно будет отправлять AJAX-запрос при переключении и обрабатывать ответ сервера.

Советы по оптимизации и тестированию Dark Mode в теме

Чтобы Dark Mode работал корректно и не вызывал проблем, рекомендуем:

  • Использовать CSS-переменные для цветов, чтобы легко менять палитру.
  • Проверять контрастность и читаемость текста в тёмной теме.
  • Тестировать сайт на разных устройствах и браузерах.
  • Обращать внимание на изображения: для тёмного режима могут понадобиться альтернативные версии.
  • Использовать инструменты разработчика браузера для эмуляции prefers-color-scheme.

Если хотите упростить разработку, можно использовать тему Reboot от WPSHOP, которая имеет встроенную поддержку Dark Mode и адаптивных настроек.

Заключение

Добавление поддержки Dark Mode в тему WordPress — это несложный, но очень полезный шаг для улучшения юзабилити вашего сайта. Начинайте с простых CSS-медиа-запросов, а затем при необходимости расширяйте функционал переключателем и сохранением выбора пользователя. Используйте приведённые примеры кода и рекомендации, чтобы сделать ваш сайт современным и удобным для посетителей.

Оптимизация кода темы WordPress для улучшения производительности
15.01.2026
Как создать шорткод в WordPress своими руками
10.11.2025
Как создать свою WordPress тему с нуля
04.11.2025
Как создать динамические фильтры в теме WordPress для кастомных типов записей
13.12.2025
Как реализовать динамическую пагинацию в WordPress теме
08.01.2026