Intereting Posts
Добавить пользовательские результаты поиска в основной поиск WP Как добавить пользовательские поля в настройки в виджетах для всех зарегистрированных виджетов? Как повторно импортировать XML-файл WordPress после редактирования? Домашняя страница перенаправления / страница / 1 / в / блог / страница / 1 / Несколько редакторов WYSIWYG с настройками teeny => true Получить настройки плагина и вставить в строку XML хотите добавить параметр загрузки видео для внешнего пользователя WP REST возвращает значение функции ошибки из запроса Модификация CSS Обновить дату создания сообщения при обновлении Длинные постоянные ссылки расщепляются на многоточие и ломаются Woocommerce показывает изображения размытыми на странице описания Перечислите таксономический термин «Фамилия» + «Имя» (поле таксономии) в почтовом цикле WP_Query с meta_query возвращает нулевой результат Наличие отдельных сообщений появляется на домашней странице блога и правильно отображает пункты меню?

Показывать братьев и сестер (если есть) и родителей

Мой вопрос связан с показом родителей и братьев и сестер на текущей странице.

Если я на странице уровня 2, я хотел бы показать братьев и сестер без их детей. Если я на третьей странице, я хотел бы показать братьев и сестер, родителей и родителей.

Например, если бы у меня были такие уровни страниц:

Животные (уровень 1)
– Рыба (уровень 2)
– Лосось (уровень 3)
— Форель
– Щука
– Млекопитающие
– Собаки
– Кошки
растения

Если я нахожусь на странице Fish, я хотел бы показать братьев и сестер:

Рыба
Млекопитающие

Если я нахожусь на странице «Лосось», я хотел бы показать братьям и сестрам, родителям и родителям братьям и сестрам:

Рыба
– Лосось
– Форель
– Щука
Млекопитающие

Мой текущий код выглядит следующим образом:

<?php if($post->post_parent) $children = wp_list_pages("title_li=&child_of=".$post->post_parent."&echo=0&sort_column=menu_order"); else $children = wp_list_pages("title_li=&child_of=".$post->ID."&echo=0&sort_column=menu_order"); if ($children) { ?> <ul><?php echo $children; ?></ul> <?php } ?> 

Как бы то ни было, ваш код почти работает, но он проверяет, имеет ли текущая страница родительский элемент, который всегда будет прав для страниц 2-го и 3-го уровня.

WordPress дает нам get_ancestors для извлечения упорядоченного массива предков для любого типа иерархического объекта:

 get_ancestors( $object_id, $object_type ); 

Таким образом, мы можем использовать get_ancestors( $post->ID, 'page' ) и подсчитывать элементы, чтобы помочь нам получить глубину для вашей навигации.

 if($post->post_parent) { $ancestors = get_ancestors( $post->ID, 'page' ); if ( 1 == count( $ancestors ) ) { echo '<ul>'; wp_list_pages( array ( 'title_li' => '', 'sort_column' => 'menu_order', 'child_of' => $ancestors[0], 'depth' => 1 ) ); echo '</ul>'; } if ( 2 == count( $ancestors ) ) { echo '<ul>'; wp_list_pages( array ( 'title_li' => '', 'sort_column' => 'menu_order', 'child_of' => $ancestors[1], 'depth' => 2 ) ); echo '</ul>'; } } 

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