Quick Tip: Display Excerpts of Child Pages with a Shortcode

Student iconAre you a student? Get a yearly Tuts+ subscription for $45 →

Sometimes we have a page just for the sake of making it a parent of other pages. I've even seen these pages left blank! You should at least have a small paragraph for the sake of search engines and visitors alike, but what about also offering a snippet of the subpages to read similar to how your blog page does posts?

In this quick tip, we'll create a little function that will query the page for child pages, display titles, excerpts and links if it finds any, and add it to a shortcode for use from the WordPress page editor.

Create the Function

function subpage_peek() {
	global $post;
	//query subpages
	$args = array(
		'post_parent' => $post->ID,
		'post_type' => 'page'
	$subpages = new WP_query($args);
	// create output
	if ($subpages->have_posts()) :
		$output = '<ul>';
		while ($subpages->have_posts()) : $subpages->the_post();
			$output .= '<li><strong><a href="'.get_permalink().'">'.get_the_title().'</a></strong>
						<p>'.get_the_excerpt().'<br />
						<a href="'.get_permalink().'">Continue Reading →</a></p></li>';
		$output .= '</ul>';
	else :
		$output = '<p>No subpages found.</p>';
	// reset the query
	// return something
	return $output;

This code performs a simple query for the current page's children.

  • Query the child pages
  • If the query returns pages, loop through them and create an output with an unordered list that includes the linked title, the excerpt, and a "Continue Reading" link
  • If the query doesn't return anything, set the output to say that nothing was found. You could set this to whatever would be the most useful for your application.
  • Don't forget to reset the post data!
  • Return the results rather than echo them so that it can be used as a shortcode

Create the Shortcode

add_shortcode('subpage_peek', 'subpage_peek');

Creating shortcodes out of functions is pretty simple with the built in WordPress function. You could also simply echo the function from within a template. If you really wanted to get creative, you could add it to a custom widget!


That's all, folks! This is a pretty handy way of handling subpages and offering a preview to readers. Your output should look something like this:

Custom Meta Box