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

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

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

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

Динамическое меню:

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

Давайте рассмотрим, как создать такое меню с нуля.

Регистрация кастомного меню в WordPress

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

function wpkit_register_dynamic_menu() {
    register_nav_menu('wpkit_dynamic_menu', __('WPKit Динамическое меню'));
}
add_action('after_setup_theme', 'wpkit_register_dynamic_menu');

Теперь у вас появится новое место для меню в админке WordPress, куда можно привязать любое меню. Однако мы не будем использовать статическое меню, а создадим динамическую генерацию.

Создание функции для динамического построения меню

Для динамического меню мы создадим функцию wpkit_get_dynamic_menu_items(), которая будет возвращать массив пунктов меню в нужном формате.

Рассмотрим пример, когда меню формируется из категорий блога с добавлением пункта «Главная» и пункта «Контакты».

function wpkit_get_dynamic_menu_items() {
    $menu_items = [];

    // Пункт Главная
    $menu_items[] = [
        'title' => 'Главная',
        'url' => home_url('/'),
        'ID' => 1
    ];

    // Получаем категории
    $categories = get_categories(['hide_empty' => false]);
    foreach ($categories as $cat) {
        $menu_items[] = [
            'title' => $cat->name,
            'url' => get_category_link($cat->term_id),
            'ID' => 1000 + $cat->term_id
        ];
    }

    // Пункт Контакты
    $menu_items[] = [
        'title' => 'Контакты',
        'url' => home_url('/contacts'),
        'ID' => 9999
    ];

    return $menu_items;
}

В этом массиве каждый элемент — это пункт меню с заголовком, ссылкой и уникальным ID. ID нужен для правильного формирования HTML и возможного расширения функционала.

Вывод динамического меню в теме

Для вывода меню используем стандартный HTML с классами WordPress. Создадим функцию wpkit_display_dynamic_menu(), которая вызовет wpkit_get_dynamic_menu_items() и сформирует список меню.

function wpkit_display_dynamic_menu() {
    $items = wpkit_get_dynamic_menu_items();

    echo '<ul class="wpkit-dynamic-menu">';
    foreach ($items as $item) {
        echo '<li id="menu-item-'.esc_attr($item['ID']).'" class="menu-item">';
        echo '<a href="'.esc_url($item['url']).'">'.esc_html($item['title']).'</a>';
        echo '</li>';
    }
    echo '</ul>';
}

Вставьте вызов wpkit_display_dynamic_menu() в нужное место темы, например, в header.php.

Добавление условий для динамики меню

Теперь добавим логику отображения пунктов меню в зависимости от контекста. Например, покажем пункт «Профиль» только авторизованным пользователям.

function wpkit_get_dynamic_menu_items() {
    $menu_items = [];

    $menu_items[] = [
        'title' => 'Главная',
        'url' => home_url('/'),
        'ID' => 1
    ];

    $categories = get_categories(['hide_empty' => false]);
    foreach ($categories as $cat) {
        $menu_items[] = [
            'title' => $cat->name,
            'url' => get_category_link($cat->term_id),
            'ID' => 1000 + $cat->term_id
        ];
    }

    if (is_user_logged_in()) {
        $menu_items[] = [
            'title' => 'Профиль',
            'url' => get_edit_profile_url(get_current_user_id()),
            'ID' => 5000
        ];
    } else {
        $menu_items[] = [
            'title' => 'Вход',
            'url' => wp_login_url(),
            'ID' => 5001
        ];
    }

    $menu_items[] = [
        'title' => 'Контакты',
        'url' => home_url('/contacts'),
        'ID' => 9999
    ];

    return $menu_items;
}

Такое меню будет меняться в зависимости от того, вошёл пользователь или нет.

Использование плагина для расширения функционала динамического меню

Если вы хотите не писать всё с нуля, рекомендую обратить внимание на плагин Clearfy Pro. Он позволяет оптимизировать меню, отключать неиспользуемые элементы и добавлять пользовательские условия для показа пунктов. Это ускорит разработку и снизит количество кода.

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

Создание динамического меню — полезный навык для разработчика WordPress, позволяющий сделать навигацию гибкой и адаптивной. Используйте встроенные функции WordPress для получения данных (как get_categories() или is_user_logged_in()) и формируйте массив пунктов меню в удобном формате. Вывод меню организуйте через отдельную функцию, чтобы было удобно менять логику без правки шаблонов.

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

Как изменить URL адреса типа permalink в WordPress без потери трафика
13.12.2025
Как проверить и исправить ошибку 429 в WooCommerce
19.05.2026
Как удалить старые версии WooCommerce после обновления без проблем
01.07.2026
Как автоматически удалять нерабочие скрипты в WordPress для ускорения сайта
07.03.2026
Как настроить отложенный запуск задач в WordPress на базе WP-Cron
10.04.2026