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

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

Почему важно иметь динамическое меню в WordPress

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

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

Создание динамического меню с помощью PHP-функций WordPress

Для начала разберёмся, как можно программно менять пункты меню. В WordPress меню создаются как объекты типа nav_menu, и мы можем использовать фильтр wp_nav_menu_objects, чтобы модифицировать пункты меню перед выводом.

Вот пример функции, которая убирает из меню пункты, если пользователь не авторизован:

function wpsource_filter_menu_items_by_user($items) {
    if (!is_user_logged_in()) {
        foreach ($items as $key => $item) {
            // Допустим, скрываем пункт с ID 42 для гостей
            if ($item->ID == 42) {
                unset($items[$key]);
            }
        }
    }
    return $items;
}
add_filter('wp_nav_menu_objects', 'wpsource_filter_menu_items_by_user');

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

Добавление новых пунктов меню динамически

Иногда необходимо добавить в меню пункт, которого нет в админке. Для этого можно тоже использовать фильтр и создавать объект пункта меню вручную:

function wpsource_add_custom_menu_item($items, $args) {
    if ($args->theme_location == 'primary') { // например, для основного меню
        $custom_item = new stdClass();
        $custom_item->ID = 9999;
        $custom_item->title = 'Специальное предложение';
        $custom_item->url = home_url('/special-offer');
        $custom_item->menu_item_parent = 0;
        $custom_item->classes = array('special-offer-menu-item');
        $custom_item->type = '';
        $custom_item->object = '';
        $custom_item->object_id = '';
        $custom_item->db_id = 0;
        $items[] = $custom_item;
    }
    return $items;
}
add_filter('wp_nav_menu_objects', 'wpsource_add_custom_menu_item', 10, 2);

Такой пункт появится в меню автоматически без внесения изменений в админку.

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

Если не хочется писать код самостоятельно, можно воспользоваться специализированными плагинами. Вот несколько рекомендаций с примерами:

1. Clearfy Pro

Этот плагин помогает управлять функционалом сайта и имеет в том числе опции для управления меню и видимостью элементов. Можно настроить показ пунктов в зависимости от роли пользователя, типа устройства, страниц и т.п.

2. WPCommunity

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

3. Nav Menu Roles

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

Примеры практического применения динамического меню

Автоматическое меню для магазина WooCommerce

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

function wpsource_add_my_orders_menu_item($items, $args) {
    if ($args->theme_location == 'primary' && is_user_logged_in()) {
        $custom_item = new stdClass();
        $custom_item->ID = 10001;
        $custom_item->title = 'Мои заказы';
        $custom_item->url = wc_get_account_endpoint_url('orders');
        $custom_item->menu_item_parent = 0;
        $custom_item->classes = array('my-orders-menu-item');
        $items[] = $custom_item;
    }
    return $items;
}
add_filter('wp_nav_menu_objects', 'wpsource_add_my_orders_menu_item', 10, 2);

Меню с отображением по времени суток

Можно создать меню, меняющее пункты в зависимости от текущего времени. Например, показывать ссылку на дневные акции с 9:00 до 18:00, а вечерние — после 18:00:

function wpsource_time_based_menu($items) {
    $hour = date('H');
    foreach ($items as $key => $item) {
        if ($item->ID == 55 && ($hour < 9 || $hour > 18)) {
            unset($items[$key]); // скрываем дневной пункт вне времени
        }
        if ($item->ID == 56 && ($hour <= 18)) {
            unset($items[$key]); // скрываем вечерний пункт до 18:00
        }
    }
    return $items;
}
add_filter('wp_nav_menu_objects', 'wpsource_time_based_menu');

Учет SEO при создании динамического меню

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

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

Итоги и рекомендации

— Используйте фильтр wp_nav_menu_objects для управления пунктами меню программно.

— Добавляйте или удаляйте пункты в зависимости от ролей, времени, контекста страницы.

— Для более сложных задач можно использовать плагины, например, Clearfy Pro или WPCommunity.

— Следите за SEO и не скрывайте важные для индексации ссылки.

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

Как запретить роботам индексировать страницы архива в WordPress
20.02.2026
Как добавить владельцев страниц в WordPress с разными ролями и ограничениями
23.03.2026
Удаление невалидных атрибутов и тегов из WooCommerce HTML для улучшения SEO
21.04.2026
Как удалить автоматические ревизии в WordPress для ускорения сайта
19.03.2026
WooCommerce: как автоматически очищать корзину и сессии после оформления заказа
14.05.2026