Intereting Posts
Плагин списка рассылки WordPress работает в фоновом режиме Как я могу безопасно удалить WP-Super Cache, не загружая свой сайт? Показывать миниатюру только на первом месте в цикле? Отношение Meta Query «AND» затем задает массив соответственно Эффективный способ проверки локальных PHP-файлов WordPress и базы данных для вредоносного кода? Использование для функции: wp_update_user Добавление виджетов в черновики страниц Задайте по умолчанию количество столбцов в галерее Добавьте дополнительные поля к показанному изображению Индивидуальная отдельная страница типа сообщения (одно-{CPT-name}) 404, когда пуля включает дефисы Есть ли способ получить 3 + мерный массив из одной команды MySql Структура пользовательского типа сообщений для сообщений с несколькими дочерними сообщениями WordPress Последнее сообщение с указанием названия Не удалось получить титул последнего сообщения Получение всех категорий даже без продуктов под ним?

Вставьте другие меню в качестве подменю главного меню

У меня есть главное меню, в котором есть элементы для каждого из моих сервисов.

У каждого из этих cpts есть другое связанное с ним меню, id которого я захватываю, используя функцию ACF get_field.

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

Я использую фильтр wp_get_nav_items, но я не могу получить формат в правильном направлении. Я решил, что могу просто добавить элементы из сервисных меню в массив элементов главного меню, изменяя menu_item_parent. Однако это не работает. Он просто добавляет все элементы на верхнем уровне.

function custom_insert_service_menus($items, $menu, $args){ if($menu->slug != 'main-menu') return $items; // only for main-menu $new_items = []; foreach($items as $item){ if($item->object == 'service'){ $menu_id = get_field('menu', $item->object_id); if(!empty($menu_id)){ // no menu so skip item $service_menu_items = wp_get_nav_menu_items($menu_id); foreach($service_menu_items as $service_menu_item){ if($service_menu_item->menu_item_parent == 0){ $service_menu_item->menu_item_parent = $item->ID; } $new_items[] = $service_menu_item; } } } } $combined_items = array_merge($items, $new_items); return $combined_items; } add_filter('wp_get_nav_menu_items', 'custom_insert_service_menus',null,3); 

Чтобы заставить его работать, мне пришлось восстановить порядок меню.

 function custom_insert_service_menus($items, $menu, $args){ if($menu->slug != 'main-menu') return $items; // only run filter for main-menu $new_items = []; $menu_order = 1; foreach($items as $item){ $item->menu_order = $menu_order; $new_items[] = $item; $menu_order++; if($item->object == 'service'){ $menu_id = get_field('menu', $item->object_id); if(!empty($menu_id)){ // no menu so skip item $service_menu_items = wp_get_nav_menu_items($menu_id); foreach($service_menu_items as $service_menu_item){ if($service_menu_item->menu_item_parent == 0){ $service_menu_item->menu_item_parent = $item->ID; } $service_menu_item->menu_order = $menu_order; $new_items[] = $service_menu_item; $menu_order++; } } } } return $new_items; }