В WordPress меню – это один из важнейших элементов навигации на сайте. Часто стандартных возможностей создания меню в админке недостаточно для реализации сложных или динамически изменяющихся структур. В этой статье мы подробно разберём, как создать динамические меню в WordPress без использования плагинов. Такой подход позволяет получить максимально оптимизированный и кастомизированный функционал, который легко вписывается в тему, например, в популярную тему Hueman.
Почему стоит создавать динамические меню вручную
Часто пользователи прибегают к плагинам для расширения функционала меню, но это может приводить к излишнему усложнению и замедлению сайта. Самостоятельное создание динамических меню позволит:
- Контролировать структуру и вывод меню полностью;
- Оптимизировать код под конкретные задачи и дизайн;
- Избежать конфликтов с другими плагинами и темами;
- Облегчить поддержку и масштабирование функционала;
- Избавиться от лишних запросов к базе данных, ускорив загрузку сайта.
Также динамические меню дают возможность создавать меню на основе пользовательских условий, например, выводить разные пункты для разных ролей пользователей, или меню на основе категорий, тегов и других параметров.
Создание простого динамического меню на основе таксономий
Рассмотрим пример, когда нужно вывести меню с пунктами, которые соответствуют категориям записей. Это часто встречающаяся задача, когда в меню должны автоматически появляться новые категории без ручного добавления.
Регистрация пользовательского меню (если нужно)
В файле functions.php темы Hueman (или дочерней темы) зарегистрируем место для меню:
function hueman_register_dynamic_menu() {
register_nav_menu('dynamic-category-menu', __('Dynamic Category Menu', 'hueman'));
}
add_action('after_setup_theme', 'hueman_register_dynamic_menu');
Это позволит подключать меню в нужном месте темы.
Вывод меню с категориями
Далее создадим функцию вывода меню, которая динамически подгружает категории и формирует список:
function hueman_dynamic_category_menu() {
$categories = get_categories(array(
'orderby' => 'name',
'order' => 'ASC',
'hide_empty' => false
));
if (empty($categories)) {
echo '<p>Категории не найдены.</p>';
return;
}
echo '<ul class="dynamic-category-menu">';
foreach ($categories as $category) {
$category_link = get_category_link($category->term_id);
echo '<li><a href="' . esc_url($category_link) . '">' . esc_html($category->name) . '</a></li>';
}
echo '</ul>';
}
Теперь в нужном месте шаблона (например, в header.php или sidebar.php) вызывайте hueman_dynamic_category_menu() и получите актуальное меню с категориями.
Динамическое меню с условиями для разных ролей пользователей
Для сайтов с разными типами пользователей важно показывать разные пункты меню в зависимости от их роли. Например, администраторы видят все ссылки, а обычные подписчики – только базовые.
Пример реализации условного меню
function hueman_dynamic_role_menu() {
echo '<ul class="dynamic-role-menu">';
if (current_user_can('administrator')) {
echo '<li><a href="/admin-dashboard">Админ-панель</a></li>';
echo '<li><a href="/manage-posts">Управление постами</a></li>';
}
if (current_user_can('editor') || current_user_can('administrator')) {
echo '<li><a href="/editor-panel">Панель редактора</a></li>';
}
if (is_user_logged_in()) {
echo '<li><a href="/profile">Профиль</a></li>';
echo '<li><a href="' . wp_logout_url(home_url()) . '">Выйти</a></li>';
} else {
echo '<li><a href="/login">Войти</a></li>';
}
echo '</ul>';
}
Такое меню можно использовать для создания персонализированной навигации без плагинов.
Автоматическое создание меню из произвольных типов записей и таксономий
Если на сайте используются кастомные типы записей и таксономии, можно автоматически создавать меню с ссылками на их архивы или отдельные записи.
Пример: меню с произвольным типом записей «Проекты»
Для типа записи projects выведем меню с последними 5 проектами:
function hueman_dynamic_projects_menu() {
$projects = get_posts(array(
'post_type' => 'projects',
'numberposts' => 5,
'orderby' => 'date',
'order' => 'DESC'
));
if (empty($projects)) {
echo '<p>Проекты не найдены.</p>';
return;
}
echo '<ul class="dynamic-projects-menu">';
foreach ($projects as $project) {
$link = get_permalink($project->ID);
echo '<li><a href="' . esc_url($link) . '">' . esc_html($project->post_title) . '</a></li>';
}
echo '</ul>';
}
Вы можете вызывать эту функцию в любом месте темы для вывода актуального меню проектов.
Стилизация меню и адаптация под тему Hueman
Чтобы динамические меню выглядели гармонично с темой Hueman, нужно добавить простые стили. Пример CSS:
.dynamic-category-menu, .dynamic-role-menu, .dynamic-projects-menu {
list-style: none;
padding: 0;
margin: 0;
display: flex;
gap: 15px;
}
.dynamic-category-menu li a,
.dynamic-role-menu li a,
.dynamic-projects-menu li a {
text-decoration: none;
color: #2c3e50;
font-weight: 600;
}
.dynamic-category-menu li a:hover,
.dynamic-role-menu li a:hover,
.dynamic-projects-menu li a:hover {
color: #0073aa;
}
Добавьте этот CSS в файл стилей вашей темы или дочерней темы.
Заключение по созданию динамических меню
Создание динамических меню вручную в WordPress – мощный инструмент разработки. Он позволяет адаптировать навигацию под любые задачи без избыточного кода и плагинов. Благодаря использованию WordPress API, таких как get_categories(), get_posts(), и функций проверки ролей, можно создавать гибкие и актуальные меню для любого сайта на базе WordPress.
Если вы хотите расширить функционал, советуем обратить внимание на плагины из каталога WPSHOP, которые могут помочь с оптимизацией и добавлением дополнительных возможностей для меню и навигации.