wp-query, вытащить дочерние элементы родительской страницы

Итак, вот что я пытаюсь сделать: я пытаюсь разработать тему, которая показывает любые подстраницы на родительской странице. Я успешно выполнил это с WP_query и простой цикл:

<!--show sub pages on this page--> <?php $childargs = array( 'post_parent' => $post->ID, 'post_type' => 'page', 'posts_per_page' => '-1', 'orderby' => 'menu_order', 'order' => 'ASC' ); $child = new WP_Query($childargs); // only show the navbar on pages with sub-children if ($child->have_posts()) { ?> <div class="sub"> <div class="pw"> <?php if ($child->have_posts()) : while ($child->have_posts()) : $child->the_post(); ?> <a href="<?php the_permalink() ?>"><?php the_title(); ?></a> <?php endwhile; endif; wp_reset_query(); ?> </div> </div><!--sub--> <?php } ?> 

Этот код абсолютно ничего не отображает на самих дочерних страницах, что является правильным поведением. Я хочу, чтобы дочерние страницы отображали эту навигацию, но я не знаю, как это сделать. $ childargs ссылается на postid, который в случае дочерней страницы будет дочерней страницей (у которой нет собственных детей).

Как я могу изменить этот код, чтобы он отображался не только на родительских страницах, но и на дочерних страницах? Демо-страницу можно найти здесь: http://sheepish-lab637.com/one/about/ со своими дочерними детьми.

Изменить: возможно, это может быть лучше реализовано в меню WordPress, которое также будет иметь преимущество при объединении классов current_page_item по умолчанию и т. Д.

Благодаря!

Solutions Collecting From Web of "wp-query, вытащить дочерние элементы родительской страницы"

Если это post_parent страница, post_parent будет отличным от нуля, поэтому вы можете проверить это:

 if( 0 == $post->post_parent ){ // no parent, get children of this page $childargs['post_parent'] = $post->ID; } else { // has parent, get children of parent page $childargs['post_parent'] = $post->post_parent; } 

Это предполагает, что ваши дочерние страницы находятся на одном уровне ниже родительских страниц. В противном случае вы можете получить всех предков страницы с помощью get_post_ancestors и получить идентификатор родителя самого высокого уровня:

 $parents = get_post_ancestors( $post->ID ); $top_level_page = $parents[ count($parents) - 1 ];