wp query to get child pages of current page

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.

Read More

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

Related posts

Leave a Reply

4 comments

  1. You 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(); ?>
    
  2. 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.

  3. 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(); 
    }