Мне очень часто приходилось сталкиваться с тем, что возможностей функции wp_nav_menu() не хватало для того, чтобы получить то меню, которое мне было нужно.
Иногда проблема решалась при помощи волкера, иногда при помощи не всем известной wp_get_nav_menu_items(), но порой приходилось придумывать более изощрённые способы вывода пунктов. В ходе одного из таких способов я и использовал функцию, которую вы видите ниже.
Преимущество функции в том, что она не делает запросов в базу данных или куда-то ещё, а работает с уже предоставленным ей списком элементов, алгоритм такой:
$nav_menu_items
— массив объектов элементов меню, который очень удобно получить при помощи wp_get_nav_menu_items()./** * Возвращает дочерние элементы пункта меню * * @param целое ID родительского элемента * @param массив Массив объектов элементов меню, по которым будет проходить отбор * @param логическое Нужно ли учитывать дочерние элементы всех уровней вложенности * @return массив Массив объектов дочерних элементов */ function true_get_nav_menu_children_items( $parent_id, $nav_menu_items, $dpth = true ) { $dochernie = array(); foreach ( (array) $nav_menu_items as $nav_item ) { if ( $nav_item->menu_item_parent == $parent_id ) { $dochernie[] = $nav_item; // если вам не нужны дочерние всех уровней вложенности, то даже можете удалить следующие 5 строк кода if ( $dpth ) { if ( $dch = get_nav_menu_item_children( $nav_item->ID, $nav_menu_items ) ) $dochernie = array_merge( $dochernie, $dch ); } } } } return $dochernie; }
Вот по сути и всё — добавляете её в functions.php
и потом где хотите используете на сайте.
Чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или войдите.
Миш, а ты уже глянул новый вп? Интересует разбор о тебя о встроенной поддержке адаптивных картинок.
А про менюху полезно, хотя я для этого обычно второе регистрирую ))
Спасибо за наводку на тему нового поста :)
Пост будет готов в пятницу.
Отлично, спасибо
Здравствуй, Миша. Получается что дочерние элементы, например дочерние страницы будут автоматически добавляться в меню?
Привет!
Зависит конечно от того, что передать в параметре
$nav_menu_items
, а вообще — да.Ох, уже стыдно заваливать вопросами, но приходится.
Я пришел к выводу чтобы найти быстрее полезную инфу на truemisha надо открыть https://misha.agency/sitemap и включить поиск по всей странице (ctrl + f).
Но к моему прискорбному сожалению, наткнулся на то, что про вложенные и дочерние страницы инфы не обнаруживается.
Меня интересует следующий вопрос: Как отобразить в SideBar или где-либо еще на странице WP вложенные в неё же страницы.
Пояснение: например, site.com/1/2/3/
главной странице принадлежат дочки: 1, 2, 3
странице "1": 2,3
странице "2": 3.
то есть "хлебные крошки наоборот".
Я делал так, что отображались вообще все странички. Но как сделать так чтобы вложенность отображалась уникальная, присвоенная конкретной странице.
Еще пример:
есть у автомобилей марки - 60 штук,
у каждой марки есть модели,
а у моделей конфигурации.
* - принцип родительских и дочерних элементов.
получается такой расклад:
1. стартовая страница - автомобили (где список марок)
2. страница выбранной марки- где список моделей
3. страница конкретной модели - где список конфигураций.
p.s. почти пост полноценный получился))
Зато понятно сформулирован вопрос))
На самом деле делается это проще простого при помощи WP_Query.
спасибо, попробую)
а если надо в таком формате?:
Тебе как, готовый код или ссылку на пост?)
можно пост) заранее спасибо))
я так понимаю речь идет об этом посте https://misha.agency/blog/wordpress/wp_query.html
А если проблемы с миниатюрами, то ещё и об этом.
скинь плиз код)
почему при выводе шорткода, русский контент из этого шорткода в вопросиках. Хотя стоит кодировка utf8 без BOM. Сам шорткода находится в function.php. А база в utf8-general-ci?
может тут что поможет?)
ура, заработало - спасибо огромное!
+1 к карме