@Mixa

Как получить id всех страниц которые используются в меню wordpress?

Допустим на сайте есть страницы с описанием каждого сотрудника - у каждого своя страничка.

Я создал меню и вывел на все эти страницы через wp_nav_menu в шапке сайта.

Но все эти страницы собраны так же под одной крышей на странице Сотрудники, где кроме имени сотрудника, которая является ссылкой на его страницу, должно быть краткое описание, скажем, должность.

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

Так вот, как можно заполучить массив с айдишками всех постов/страниц конкертного меню в том же порядке, в котором его настроил пользователь? Спасибо.
  • Вопрос задан
  • 500 просмотров
Решения вопроса 1
wppanda5
@wppanda5 Куратор тега WordPress
WordPress Mедведь
/**
         * Получает ID всех  объектов используемых в меню
         *
         * использование  $x = cr_menu_items_ID('primary');
         * пример возвращаемых данных
         * Array ( 
         *      [custom] => Array ( 
         *           [0] => 807 
         *      ) 
         *      [category] => Array ( 
         *          [0] => 2 
         *          [1] => 10 
         *          [2] => 22 
         *      ) 
         *      [page] => Array ( 
         *          [0] => 74 
         *      ) 
         *      [woocommerce] => Array ( 
         *          [0] => 54 
         *          [1] => 39 
         *          [2] => 40
         *      )
         *  )
         *
         * @param $menu_id - идентификатор меню
         * @return array массив с ID элементов меню где ключом будет выступать тип объекта значением массив с id объектов
         */
        function cr_menu_items_ID($menu_id)
        {
            if (($locations = get_nav_menu_locations()) && isset($locations[$menu_id])) {
                $menu = wp_get_nav_menu_object($locations[$menu_id]);
                $menu_items = wp_get_nav_menu_items($menu->term_id);
            }

            foreach ($menu_items as $menu_item) {
               // print_r($menu_item);
                $numbers[$menu_item->object][] = get_post_meta($menu_item->ID, '_menu_item_object_id', true);
            }

            return $numbers;
        }
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Я бы посоветовал вам реализовать через пользовательские типы данных: register_post_type (ссылка на кодекс - https://codex.wordpress.org/Function_Reference/reg...
в дальнейшем там можно и пользовательские поля запрограммировать!
Можно в принципе и реализовать как хотите вы!
но поскольку у нас в сформированом меню будет такой вид:

и цифра 94 - это не ID страницы, а ID идентификатора меню, то нужно будет вырезать ссылки и по ним искать страницы! что на мой взгляд не оправданно!
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы