Task 6875 | пересобрал меню и его вывод с помощью WP_nav_menu

pull/36/head
parent b7312ebf1b
commit db11843fca
  1. 5
      wp-content/themes/cosmopet/modules/header/module-controller.php
  2. 107
      wp-content/themes/cosmopet/temp-functions/menu-logic.php
  3. 176
      wp-content/themes/cosmopet/templates/header.twig

@ -79,6 +79,11 @@ add_filter('timber/context', function($context) {
if (SITE_DOMAIN == 'AE'){
$context['front_url_en'] = "/";
}
$current_language = pll_current_language(); // Получаем текущий язык
$menu_items = wp_get_nav_menu_items('main_menu_' . $current_language); // Получаем элементы меню для текущего языка
$context['menu_items'] = $menu_items;
return $context;
});

@ -9,3 +9,110 @@ function register_custom_menus() {
]);
}
add_action('after_setup_theme', 'register_custom_menus');
class Custom_Walker_Nav_Menu extends Walker_Nav_Menu {
// Открытие уровня подменю
function start_lvl( &$output, $depth = 0, $args = null ) {
$output .= '<ul class="header-pc-menu__list">';
}
// Закрытие уровня подменю
function end_lvl( &$output, $depth = 0, $args = null ) {
$output .= '</ul>';
}
// Открытие элемента меню
function start_el( &$output, $item, $depth = 0, $args = null, $id = 0 ) {
// Для родительского элемента меню
if ($depth === 0) {
$output .= '<div class="header-pc-menu__item">';
$output .= '<a href="' . esc_url($item->url) . '" class="header-pc-menu__title">' . esc_html($item->title) . '</a>';
} else {
// Для дочерних элементов
$output .= '<li class="header-pc-menu__list-li">';
$output .= '<a href="' . esc_url($item->url) . '">' . esc_html($item->title) . '</a>';
}
}
// Закрытие элемента меню
function end_el( &$output, $item, $depth = 0, $args = null, $id = 0 ) {
// Закрытие для родительского элемента
if ($depth === 0) {
$output .= '</div>'; // Закрытие .header-pc-menu__item
} else {
// Закрытие для дочернего элемента
$output .= '</li>';
}
}
}
function get_custom_menu($location) {
// Используем wp_nav_menu с нужными параметрами
ob_start(); // Начинаем буферизацию вывода
wp_nav_menu(array(
'theme_location' => $location,
'menu_class' => '', // Не добавляем класс к ul
'container' => false, // Без контейнера
'depth' => 2, // Уровень вложенности
'walker' => new Custom_Walker_Nav_Menu(), // Используем кастомный walker
));
$menu_html = ob_get_clean(); // Получаем HTML меню
return $menu_html;
}
class Custom_Header_Phone_Menu_Walker extends Walker_Nav_Menu {
// Открытие подменю (если есть)
function start_lvl( &$output, $depth = 0, $args = null ) {
$output .= '<ul class="header-phone-menu__list">';
}
// Закрытие подменю
function end_lvl( &$output, $depth = 0, $args = null ) {
$output .= '</ul>';
}
// Открытие элемента меню
function start_el( &$output, $item, $depth = 0, $args = null, $id = 0 ) {
if ($depth === 0) {
// Для родительского элемента
$output .= '<a href="' . esc_url($item->url) . '" class="header-phone-menu__category">' . esc_html($item->title) . '</a>';
} else {
// Для дочерних элементов
$output .= '<li class="header-phone-menu__list-item">';
$output .= '<a href="' . esc_url($item->url) . '">' . esc_html($item->title) . '</a>';
$output .= '</li>';
}
}
// Закрытие элемента меню
function end_el( &$output, $item, $depth = 0, $args = null, $id = 0 ) {
// Закрытие элемента на первом уровне (родительский элемент)
if ($depth === 0) {
// Пустое завершение для родительского элемента
} else {
// Закрытие для дочернего элемента
$output .= '</li>';
}
}
}
// Функция для вызова меню и передачи HTML в Twig
function get_custom_phone_menu($location = 'phone_menu') {
ob_start(); // Начинаем буферизацию вывода
wp_nav_menu(array(
'theme_location' => $location, // Указываем местоположение меню
'menu_class' => '', // Не добавляем класс к ul, он будет добавлен кастомно в walker
'container' => false, // Без контейнера
'depth' => 2, // Уровень вложенности (для отображения подменю)
'walker' => new Custom_Header_Phone_Menu_Walker(), // Используем кастомный walker
));
$menu_html = ob_get_clean(); // Получаем HTML меню
return $menu_html;
}

@ -1,71 +1,25 @@
{# Получаем ID страницы блога из настроек #}
{% set posts_page_id = function('get_option', 'page_for_posts') %}
{# Получаем URL этой страницы #}
{% if posts_page_id %}
{% set blog_url = function('get_permalink', posts_page_id) %}
{% else %}
{% set blog_url = '/' %}
{% endif %}
<header class="header {{headerClass}}">
<div class="header__menu-block">
<div class="header__pc-menu">
<div class="header-pc-menu__content">
{# Кошки #}
<div class="header-pc-menu__item">
<a href="{% if site_region == 'ru' %}/product-category/dlya-koshek/{% elseif site_region == 'ae' %}/product-category/for-cats/{% endif %}"
class="header-pc-menu__title">
{% if current_lang == 'ru' %}Кошкам{% elseif current_lang == 'en' %}For cats{% endif %}
</a>
<ul class="header-pc-menu__list">
<li class="header-pc-menu__list-li">
<a href="{% if site_region == 'ru' %}/product-category/dlya-koshek/korm-dlya-koshek/{% elseif site_region == 'ae' %}/product-category/for-cats/cats-food/{% endif %}">
{% if current_lang == 'ru' %}Корм{% elseif current_lang == 'en' %}Food{% endif %}
</a>
</li>
<li class="header-pc-menu__list-li">
<a href="{% if site_region == 'ru' %}/product-category/dlya-koshek/lakomstva-dlya-koshek/{% elseif site_region == 'ae' %}/product-category/for-cats/treats-for-cats/{% endif %}">
{% if current_lang == 'ru' %}Лакомства{% elseif current_lang == 'en' %}Treats{% endif %}
</a>
</li>
{% if site_region == 'ru' %}
<li class="header-pc-menu__list-li">
<a href="/product-category/dlya-koshek/aksessuary-dlya-koshek-ru-ru/">{% if current_lang == 'ru' %}Аксессуары{% elseif current_lang == 'en' %}Accessories{% endif %}</a>
</li>
{% endif %}
</ul>
</div>
{% set cat_menu = fn('get_custom_menu', 'cats-menu') %}
{{ cat_menu|raw }}
{# Собаки #}
<div class="header-pc-menu__item">
<a href="{% if site_region == 'ru' %}/product-category/dlia-sobak/{% elseif site_region == 'ae' %}/product-category/for-dogs/{% endif %}" class="header-pc-menu__title">
{% if current_lang == 'ru' %}Собакам{% elseif current_lang == 'en' %}For dogs{% endif %}
</a>
<ul class="header-pc-menu__list">
<li class="header-pc-menu__list-li">
<a href="{% if site_region == 'ru' %}/product-category/dlia-sobak/korm-dlya-sobak/{% elseif site_region == 'ae' %}/product-category/for-dogs/dogs-food/{% endif %}">
{% if current_lang == 'ru' %}Корм{% elseif current_lang == 'en' %}Food{% endif %}
</a>
</li>
<li class="header-pc-menu__list-li">
<a href="{% if site_region == 'ru' %}/product-category/dlia-sobak/lakomstva-dlya-sobak-ru/{% elseif site_region == 'ae' %}/product-category/for-dogs/treats-for-dogs/{% endif %}">
{% if current_lang == 'ru' %}Лакомства{% elseif current_lang == 'en' %}Treats{% endif %}
</a>
</li>
{% if site_region == 'ru' %}
<li class="header-pc-menu__list-li">
<a href="/product-category/dlia-sobak/aksessuary-dlya-sobak-ru">{% if current_lang == 'ru' %}Аксессуары{% elseif current_lang == 'en' %}Accessories{% endif %}</a>
</li>
{% endif %}
</ul>
</div>
{% set dog_menu = fn('get_custom_menu', 'dogs-menu') %}
{{ dog_menu|raw }}
</div>
</div>
<div class="header__phone-menu">
<div class="header-phone-menu__item">
<a href="{% if current_lang == 'ru' %}{{front_url}}{% elseif current_lang == 'en' %}{{front_url_en}}{% endif %}"
class="header-phone-menu__title">{% if current_lang == 'ru' %}ГЛАВНАЯ{% elseif current_lang == 'en' %}MAIN{% endif %}</a>
class="header-phone-menu__title header-phone-menu__title--gradient">{% if current_lang == 'ru' %}ГЛАВНАЯ{% elseif current_lang == 'en' %}MAIN{% endif %}</a>
</div>
{% if current_lang == 'ru' %}
@ -74,89 +28,26 @@
ПРОДУКЦИЯ
</a>
<a href="{% if site_region == 'ru' %}/product-category/dlya-koshek/{% elseif site_region == 'ae' %}/product-category/for-cats/{% endif %}"
class="header-phone-menu__category">Кошкам</a>
<ul class="header-phone-menu__list">
<li class="header-phone-menu__list-item">
<a href="{% if site_region == 'ru' %}/product-category/dlya-koshek/korm-dlya-koshek/{% elseif site_region == 'ae' %}/product-category/for-cats/cats-food/{% endif %}">
{% if current_lang == 'ru' %}Корм{% elseif current_lang == 'en' %}Food{% endif %}
</a>
</li>
<li class="header-phone-menu__list-item">
<a href="{% if site_region == 'ru' %}/product-category/dlya-koshek/lakomstva-dlya-koshek/{% elseif site_region == 'ae' %}/product-category/for-cats/treats-for-cats/{% endif %}">
{% if current_lang == 'ru' %}Лакомства{% elseif current_lang == 'en' %}Treats{% endif %}
</a>
</li>
{% if site_region == 'ru' %}
<li class="header-phone-menu__list-item">
<a
href="/product-category/aksessuary/">Аксессуары
</a>
</li>
{% endif %}
</ul>
<a href="{% if site_region == 'ru' %}/product-category/dlia-sobak/{% elseif site_region == 'ae' %}/product-category/for-dogs/{% endif %}"
class="header-phone-menu__category">Собакам</a>
<ul class="header-phone-menu__list">
<li class="header-phone-menu__list-item">
<a href="{% if site_region == 'ru' %}/product-category/dlia-sobak/korm-dlya-sobak/{% elseif site_region == 'ae' %}/product-category/for-dogs/dogs-food/{% endif %}">
{% if current_lang == 'ru' %}Корм{% elseif current_lang == 'en' %}Food{% endif %}
</a>
</li>
<li class="header-phone-menu__list-item">
<a href="{% if site_region == 'ru' %}/product-category/dlia-sobak/lakomstva-dlya-sobak-ru/{% elseif site_region == 'ae' %}/product-category/for-dogs/treats-for-dogs/{% endif %}">
{% if current_lang == 'ru' %}Лакомства{% elseif current_lang == 'en' %}Treats{% endif %}
</a>
</li>
{% if site_region == 'ru' %}
<li class="header-phone-menu__list-item">
<a
href="/product-category/aksessuary/dlia-sobak/aksessuary-dlya-sobak-ru">Аксессуары</a>
</li>
{% endif %}
</ul>
{% set cat_m_menu = fn('get_custom_phone_menu', 'cats-menu') %}
{{ cat_m_menu|raw }}
{% set dog_m_menu = fn('get_custom_phone_menu', 'dogs-menu') %}
{{ dog_m_menu|raw }}
</div>
{% elseif current_lang == 'en' %}
<div class="header-phone-menu__item">
<a href="/shop/" class="header-phone-menu__title">
<a href="/en/shop/" class="header-phone-menu__title">
BUY
</a>
<a href="/shop/" class="header-phone-menu__category">For
cats</a>
<ul class="header-phone-menu__list">
<li class="header-phone-menu__list-item">
<a href="/product-category/cat-food/">Food</a>
</li>
<li class="header-phone-menu__list-item">
<a href="/product-category/lakomstva-dlya-koshek/">Treats</a>
</li>
{% if site_region == 'ru' %}
<li class="header-phone-menu__list-item">
<a href="/product-category/aksessuary/">Accessory</a>
</li>
{% endif %}
</ul>
<a href="/shop/" class="header-phone-menu__category">For
dogs</a>
<ul class="header-phone-menu__list">
<li class="header-phone-menu__list-item">
<a href="/product-category/dog-food/">Food</a>
</li>
<li class="header-phone-menu__list-item">
<a href="/product-category/lakomstva-dlya-sobak/">Treats</a>
</li>
{% if site_region == 'ru' %}
<li class="header-phone-menu__list-item">
<a href="/product-category/aksessuary/">Accessory</a>
</li>
{% endif %}
</ul>
{% set cat_m_menu = fn('get_custom_phone_menu', 'cats-menu') %}
{{ cat_m_menu|raw }}
{% set dog_m_menu = fn('get_custom_phone_menu', 'dogs-menu') %}
{{ dog_m_menu|raw }}
</div>
{% endif %}
<div class="header-phone-menu__item">
<a href="{% if current_lang == 'ru' %}{{about_url}}{% elseif current_lang == 'en' %}{{about_url_en}}{% endif %}"
class="main-menu__link">{% if current_lang == 'ru' %}О
class="header-phone-menu__title">{% if current_lang == 'ru' %}О
COSMOPET{% elseif current_lang == 'en' %}ABOUT COSMOPET{% endif %}</a>
</div>
@ -169,7 +60,7 @@
{% if CONSTANTS.DOMAIN != 'AE' %}
<div class="header-phone-menu__item">
<a href="{{blog_url}}"
<a href="{{fn ('get_post_type_archive_link', 'post' )}}"
class="header-phone-menu__title">{% if current_lang == 'ru' %}БЛОГ{% elseif current_lang == 'en' %}BLOG{% endif %}</a>
</div>
{% endif %}
@ -202,39 +93,12 @@
</a>
<ul class="main-menu">
{% for item in menu_items %}
<li class="main-menu__item">
<a href="{% if current_lang == 'ru' %}{{front_url}}{% elseif current_lang == 'en' %}{{front_url_en}}{% endif %}"
class="main-menu__link">{% if current_lang == 'ru' %}ГЛАВНАЯ{% elseif current_lang == 'en' %}HOME{% endif %}</a>
<a href="{{ item.url }}" class="main-menu__link">{{ item.title }}</a>
</li>
{% endfor %}
<li class="main-menu__item">
<a href="{% if current_lang == 'ru' %}{{about_url}}{% elseif current_lang == 'en' %}{{about_url_en}}{% endif %}"
class="main-menu__link">{% if current_lang == 'ru' %}О
COSMOPET{% elseif current_lang == 'en' %}ABOUT COSMOPET{% endif %}</a>
</li>
<li class="main-menu__item">
<a href=" {% if current_lang == 'ru' %}{{production_url}}{% elseif current_lang == 'en' %}{{production_url_en}}{% endif %}"
class="main-menu__link">
{% if current_lang == 'ru' %}ПРОИЗВОДСТВО{% elseif current_lang == 'en' %}PRODUCTION{% endif %}
</a>
</li>
{% if site_region == 'ae' %}
<li class="main-menu__item">
<a href=" {% if current_lang == 'ru' %}{{production_url}}{% elseif current_lang == 'en' %}/where-to-buy{% endif %}"
class="main-menu__link">
{% if current_lang == 'ru' %}ГДЕ КУПИТЬ{% elseif current_lang == 'en' %}WHERE TO BUY{% endif %}
</a>
</li>
{% endif %}
{% if CONSTANTS.DOMAIN != 'AE' %}
<li class="main-menu__item">
<a href="{{blog_url}}"
class="main-menu__link">{% if current_lang == 'ru' %}БЛОГ{% elseif current_lang == 'en' %}BLOG{% endif %}</a>
</li>
{% endif %}
<li class="main-menu__item">
<button class="main-menu__button" id="pc-menu">
{% if current_lang == 'ru' %}ПРОДУКЦИЯ{% elseif current_lang == 'en' %}BUY{% endif %}

Loading…
Cancel
Save