The Codex offers a way to list the children of the current page by adding this to your theme:
<?php $children = wp_list_pages('title_li=&child_of='.$post->ID.'&echo=0'); if ($children) { ?> <ul> <?php echo $children; ?> </ul> <?php } ?>
… or listing the siblings of the currently viewed child page:
<?php if($post->post_parent) $children = wp_list_pages('title_li=&child_of='.$post->post_parent.'&echo=0'); else $children = wp_list_pages('title_li=&child_of='.$post->ID.'&echo=0'); if ($children) { ?> <ul> <?php echo $children; ?> </ul> <?php } ?>
However, if you don’t want to include the code in your template file, you can use the shortcodes plugin for listing pages and child pages.
The above code can be expanded in a number of ways….
Example: excerpts of top-level pages with linked subpages
Here, we want to show excerpts from our top level pages, and under that, a list of the subpages. We need PJW Page Excerpt to enable excerpts for pages.
<?php $pages = get_posts('post_type=page&orderby=menu_order&order=ASC&post_parent=1200&posts_per_page=-1'); foreach($pages as $post) : ?> <div class='post' id='<?php echo $post->post_name; ?>'> <h2><a href='<?php the_permalink(); ?>' title='<?php the_title(); ?>'><?php the_title(); ?></a></h2> <p><?php the_excerpt(); ?></p> <?php $children = wp_list_pages('title_li=&child_of='.$post->ID.'&echo=0&depth=1'); if ($children) { ?> <ul class='subnav'> <?php echo $children; ?> </ul> <?php } ?> </div> <!-- .post --> <?php endforeach; ?>
Example: table of contents
In this example, we want to display a table of contents for all the children and grandchildren of page #1200:
<?php $pages = get_posts('post_type=page&orderby=menu_order&order=ASC&post_parent=1200&posts_per_page=-1'); foreach($pages as $post) : ?> <ol class='post' id='<?php echo $post->post_name; ?>'> <li><a href='<?php the_permalink(); ?>' title='<?php the_title(); ?>'><?php the_title(); ?></a> <?php $children = wp_list_pages('title_li=&child_of='.$post->ID.'&echo=0&depth=1'); if ($children) { ?> <ul class='subnav'> <?php echo $children; ?> </ul> <?php } ?> </li> </ol> <?php endforeach; ?>
Brian says
Thanks for the post. Can you recommend a solution for merging the first two code samples? My intention is to show the children as well as the siblings of any given page.
Stephanie Leary says
Brian, I’m sorry I overlooked your comment last month. Did you figure it out?