wplearn.ru wordpress WP Learn

Как создать адаптивное меню в WordPress с помощью JavaScript и CSS

В современных темах WordPress адаптивное меню — это обязательный элемент, обеспечивающий удобство навигации на мобильных устройствах. В этой статье разберём, как создать собственное адаптивное меню для темы WordPress, используя чистый JavaScript и CSS, без сторонних плагинов. Такой подход даст полную свободу кастомизации и поможет понять, как работают меню в WordPress.

Почему стоит создавать адаптивное меню самостоятельно

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

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

Кроме того, знание того, как работает адаптивное меню на практике, пригодится для отладки и расширения функционала в будущем.

Создание базовой структуры меню в WordPress

Для начала нужно вывести меню в теме. Предположим, что вы зарегистрировали меню в functions.php так:

function wplearn_register_menus() {
    register_nav_menus([
        'primary' => 'Основное меню'
    ]);
}
add_action('after_setup_theme', 'wplearn_register_menus');

В нужном месте темы, например, в header.php, выводим меню:

<nav class="wplearn-menu">
    <button class="wplearn-menu-toggle" aria-expanded="false" aria-label="Открыть меню">☰</button>
    <?php
    wp_nav_menu([
        'theme_location' => 'primary',
        'menu_class' => 'wplearn-menu-list',
        'container' => false
    ]);
    ?>
</nav>

Здесь кнопка с классом wplearn-menu-toggle — это иконка для открытия меню на мобильных устройствах. Список меню выводится с классом wplearn-menu-list.

Стилизация адаптивного меню на CSS

Сейчас сделаем так, чтобы меню было горизонтальным на больших экранах и скрывалось за кнопкой на мобильных.

/* Стили базового меню */
.wplearn-menu {
    position: relative;
}
.wplearn-menu-list {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
}
.wplearn-menu-list li {
    margin-right: 20px;
}
.wplearn-menu-list li a {
    text-decoration: none;
    color: #333;
    font-weight: 600;
}

/* Кнопка для мобильных */
.wplearn-menu-toggle {
    display: none;
    background: none;
    border: none;
    font-size: 24px;
    cursor: pointer;
    position: absolute;
    right: 0;
    top: 0;
}

/* Мобильная версия */
@media (max-width: 768px) {
    .wplearn-menu-list {
        display: none;
        flex-direction: column;
        background: #f9f9f9;
        position: absolute;
        top: 40px;
        right: 0;
        width: 200px;
        box-shadow: 0 4px 8px rgba(0,0,0,0.1);
        border-radius: 4px;
        z-index: 9999;
    }
    .wplearn-menu-list li {
        margin: 0;
        border-bottom: 1px solid #ddd;
    }
    .wplearn-menu-list li a {
        padding: 10px 15px;
        display: block;
        color: #222;
    }
    .wplearn-menu-toggle {
        display: block;
    }
    .wplearn-menu-list.active {
        display: flex;
    }
}

В этой CSS-части мы скрываем меню на мобильных устройствах и показываем кнопку. При добавлении класса active к списку меню оно отображается вертикально.

Добавляем логику открытия меню на JavaScript

Теперь нужно, чтобы при клике на кнопку меню показывалось и скрывалось. Для этого используем простой скрипт:

document.addEventListener('DOMContentLoaded', function() {
    var menuToggle = document.querySelector('.wplearn-menu-toggle');
    var menuList = document.querySelector('.wplearn-menu-list');
    
    menuToggle.addEventListener('click', function() {
        var expanded = this.getAttribute('aria-expanded') === 'true' || false;
        this.setAttribute('aria-expanded', !expanded);
        menuList.classList.toggle('active');
    });
});

Этот код переключает класс active у меню и обновляет атрибут aria-expanded для доступности.

Улучшаем доступность и UX

Для лучшего UX полезно закрывать меню при клике вне его и при выборе пункта:

document.addEventListener('click', function(e) {
    var menu = document.querySelector('.wplearn-menu');
    var toggle = document.querySelector('.wplearn-menu-toggle');
    var menuList = document.querySelector('.wplearn-menu-list');

    if (!menu.contains(e.target)) {
        menuList.classList.remove('active');
        toggle.setAttribute('aria-expanded', false);
    }
});

// Закрываем меню при выборе пункта
var menuLinks = document.querySelectorAll('.wplearn-menu-list a');
menuLinks.forEach(function(link) {
    link.addEventListener('click', function() {
        menuList.classList.remove('active');
        toggle.setAttribute('aria-expanded', false);
    });
});

Таким образом, меню не останется открытым после выбора пункта и автоматически закроется при клике вне меню.

Пример интеграции с плагином Clearfy Pro для оптимизации меню

Если вы используете плагин Clearfy Pro, он позволяет оптимизировать вывод меню и убрать лишние скрипты, что дополнительно ускорит работу навигации. Например, можно отключить ненужные стили Gutenberg и скрипты, влияющие на загрузку меню.

Рекомендация: всегда профилируйте скорость загрузки страницы с помощью инструментов, таких как Google PageSpeed Insights, чтобы удостовериться, что ваши кастомные решения не замедляют сайт.

Выводы и рекомендации по адаптивному меню в WordPress

Создание адаптивного меню своими руками — это отличный способ получить лёгкую и быструю навигацию, полностью подстроенную под дизайн вашего сайта. Главное — уделить внимание доступности, чтобы меню было удобно использовать всем посетителям.

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

×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше