Can anyone please help me to with the wp_query.
I am making a template file/loop to create and archive page of the current page children pages.
This query needs to be automatic as I am using in on few pages.
This is my query below, but it just returns my posts instead of child pages.
<?php
$parent = new WP_Query(array(
'post_parent' => $post->ID,
'order' => 'ASC',
'orderby' => 'menu_order',
'posts_per_page' => -1
));
if ($parent->have_posts()) : ?>
<?php while ($parent->have_posts()) : $parent->the_post(); ?>
<div id="parent-<?php the_ID(); ?>" class="parent-page">
<h1><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a></h1>
<p><?php the_advanced_excerpt(); ?></p>
</div>
<?php endwhile; ?>
<?php unset($parent); endif; wp_reset_postdata(); ?>
Thanks in advance for any help.
Josh
Can anyone please help me to with the wp_query.
I am making a template file/loop to create and archive page of the current page children pages.
This query needs to be automatic as I am using in on few pages.
This is my query below, but it just returns my posts instead of child pages.
<?php
$parent = new WP_Query(array(
'post_parent' => $post->ID,
'order' => 'ASC',
'orderby' => 'menu_order',
'posts_per_page' => -1
));
if ($parent->have_posts()) : ?>
<?php while ($parent->have_posts()) : $parent->the_post(); ?>
<div id="parent-<?php the_ID(); ?>" class="parent-page">
<h1><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a></h1>
<p><?php the_advanced_excerpt(); ?></p>
</div>
<?php endwhile; ?>
<?php unset($parent); endif; wp_reset_postdata(); ?>
Thanks in advance for any help.
Josh
Share Improve this question edited Nov 4, 2017 at 12:15 toni_lehtimaki 1417 bronze badges asked Jul 31, 2012 at 9:14 JoshcJoshc 1,5207 gold badges24 silver badges41 bronze badges 1- Try this solution == get children of a post - wordpress.stackexchange/a/123143/42702 – T.Todua Commented Nov 13, 2013 at 10:36
4 Answers
Reset to default 101You have to change child_of
to post_parent
and also add post_type => 'page'
:
WordPress codex Wp_query Post & Page Parameters
<?php
$args = array(
'post_type' => 'page',
'posts_per_page' => -1,
'post_parent' => $post->ID,
'order' => 'ASC',
'orderby' => 'menu_order'
);
$parent = new WP_Query( $args );
if ( $parent->have_posts() ) : ?>
<?php while ( $parent->have_posts() ) : $parent->the_post(); ?>
<div id="parent-<?php the_ID(); ?>" class="parent-page">
<h1><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a></h1>
<p><?php the_advanced_excerpt(); ?></p>
</div>
<?php endwhile; ?>
<?php endif; wp_reset_postdata(); ?>
I know this is a very old question, but since I landed on it, others might as well.
Wordpress has a very simple solution for listing pages, where you can add some arguments as well.
This is all you will need to display a page's children:
wp_list_pages(array(
'child_of' => $post->ID,
'title_li' => ''
))
Look at the reference page for wp_list_pages for all options you can apply.
Rewriting this to a function in functions.php you need to add global $post;
function page_summary() {
global $post;
$args = array(
'post_type' => 'page',
'posts_per_page' => -1,
'post_parent' => $post->ID,
'order' => 'ASC',
'orderby' => 'menu_order'
);
$parent = new WP_Query( $args );
if ( $parent->have_posts() ) :
while ( $parent->have_posts() ) : $parent->the_post(); ?>
<div id="parent-<?php the_ID(); ?>" class="parent-page">
<h1><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a></h1>
</div>
<?php
endwhile;
endif;
wp_reset_postdata();
}
Though OP asked specifically for a wp_query
, this also works:
get_pages('child_of='.$post->ID.'&sort_column=menu_order');