В WordPress меню — это важный элемент навигации, который помогает пользователям ориентироваться по сайту. Хотя большинство сайтов используют стандартный интерфейс для создания меню в админке, бывают ситуации, когда нужно создать меню программно, например, в кастомных темах или плагинах. В этой статье мы подробно разберём, как создать своё меню в WordPress с помощью PHP-кода, зарегистрировать его, вывести на фронтенд и настроить стили.
Зачем создавать меню программно в WordPress
Создание меню через интерфейс — быстро и удобно, но иногда требуется автоматизация или интеграция с кастомной функциональностью. Основные причины программного создания меню:
- Автоматический контроль структуры меню при установке темы или плагина.
- Гибкая настройка вывода в шаблонах без использования админки.
- Возможность добавлять нестандартные пункты меню с динамическими ссылками.
- Управление меню для мультиязычных сайтов или специфических условий отображения.
Теперь перейдём к практическим шагам.
Регистрация нового меню в functions.php
Первый шаг — зарегистрировать место для меню в вашей теме. Обычно это делают в файле functions.php вашей темы или дочерней темы. Для регистрации меню используется функция register_nav_menus. Вот пример кода, который добавляет два меню — основное и футерное:
function wpcourse_register_menus() {
register_nav_menus([
'primary_menu' => __('Основное меню', 'wpcourse'),
'footer_menu' => __('Меню в футере', 'wpcourse')
]);
}
add_action('after_setup_theme', 'wpcourse_register_menus');Этот код создаёт две новые локации для меню, которые потом можно будет назначить в админке WordPress.
Создание и вывод меню через wp_nav_menu
Чтобы вывести меню в нужном месте шаблона, используется функция wp_nav_menu. Например, чтобы вывести основное меню, добавьте в файл header.php следующий код:
wp_nav_menu([
'theme_location' => 'primary_menu',
'container' => 'nav',
'container_class' => 'primary-navigation',
'menu_class' => 'menu',
'fallback_cb' => false
]);Параметр theme_location указывает на зарегистрированное меню. Опция fallback_cb отключает вывод страниц, если меню не назначено.
Программное создание пунктов меню (создание меню и элементов через код)
Иногда нужно создать меню и заполнить его пунктами без участия пользователя. Для этого можно использовать функции WordPress для работы с меню через код:
wp_create_nav_menu($menu_name)— создаёт меню и возвращает его ID.wp_update_nav_menu_item($menu_id, $item_id, $args)— добавляет или обновляет элемент меню.
Пример создания меню и добавления в него пунктов:
function wpcourse_create_custom_menu() {
$menu_name = 'Custom Menu';
$menu_exists = wp_get_nav_menu_object($menu_name);
if(!$menu_exists) {
$menu_id = wp_create_nav_menu($menu_name);
// Добавляем ссылки
wp_update_nav_menu_item($menu_id, 0, [
'menu-item-title' => __('Главная', 'wpcourse'),
'menu-item-url' => home_url('/'),
'menu-item-status' => 'publish'
]);
wp_update_nav_menu_item($menu_id, 0, [
'menu-item-title' => __('Блог', 'wpcourse'),
'menu-item-url' => home_url('/blog/'),
'menu-item-status' => 'publish'
]);
// Назначаем меню в локацию
$locations = get_theme_mod('nav_menu_locations');
$locations['primary_menu'] = $menu_id;
set_theme_mod('nav_menu_locations', $locations);
}
}
add_action('after_setup_theme', 'wpcourse_create_custom_menu');Этот код при первом запуске создаст меню с двумя пунктами и автоматически назначит его в основное меню темы.
Добавление кастомных классов и атрибутов к пунктам меню
Чтобы расширить функциональность меню, можно добавлять свои CSS-классы и атрибуты к пунктам меню. Для этого используется фильтр nav_menu_css_class или walker. Пример добавления класса для всех пунктов меню:
function wpcourse_add_menu_item_class($classes, $item, $args, $depth) {
$classes[] = 'wpcourse-menu-item';
return $classes;
}
add_filter('nav_menu_css_class', 'wpcourse_add_menu_item_class', 10, 4);Если нужна более сложная кастомизация — например, добавление иконок или специальных обёрток, стоит использовать кастомный класс Walker_Nav_Menu. Вот упрощённый пример:
class WPCourse_Walker_Nav_Menu extends Walker_Nav_Menu {
function start_el(&$output, $item, $depth=0, $args=array(), $id=0) {
$output .= '<li class="custom-class">';
$output .= '<a href="' . esc_attr($item->url) . '">' . esc_html($item->title) . '</a>';
}
function end_el(&$output, $item, $depth=0, $args=array()) {
$output .= "</li>";
}
}Применить этот walker можно так:
wp_nav_menu([
'theme_location' => 'primary_menu',
'walker' => new WPCourse_Walker_Nav_Menu()
]);Полезные плагины для работы с меню в WordPress
Если хочется более удобного интерфейса или дополнительных возможностей, можно обратить внимание на плагины:
- Clearfy Pro — улучшает админку, в том числе управление меню и оптимизацию.
- WPCommunity — тема с расширенными возможностями настройки меню и навигации.
Выводы и советы по созданию меню в коде
Создание меню программно даёт полный контроль над навигацией, помогает автоматизировать задачи и интегрировать меню в сложные проекты. Главное — не забывать про удобство администрирования и совместимость с темой. Если меню простое — достаточно зарегистрировать локацию и вывести через wp_nav_menu. Если нужны динамические пункты — используйте создание элементов через функции WordPress.
Также рекомендуем внимательно тестировать меню на разных устройствах и браузерах, а для стилизации использовать кастомные классы и CSS. В итоге, программное создание меню — важный инструмент разработчика, позволяющий делать гибкие и мощные решения для сайтов на WordPress.