It is possible to print out a list of pages in Wordpress, but these functions are designed to print from the root pages to a certain level. I often need to print out a list of pages that are children of the current page being looked at so I created the following function.
/** * Get a list of child pages. * * @param integer $id The ID of the parent page. * * @return string The list of child pages. */ function getChildPagesList($id) { // Get the child pages of the current page. 'child_of' => $id, 'echo' => 0, ); $pages = get_pages($args); // Build the page list $class = ''; $option = '<ul>'; foreach ($pages as $pagg) { if (is_page($pagg->ID)) { $class = ' class="on"'; } $option .= '<li' . $class . '>'; $option .= '<a href="' . get_page_link($pagg->ID) . '" title="' . $pagg->post_title . '">' . $pagg->post_title . '</a>'; $option .= '</li>'; $class = ''; } $option .= '</ul>'; // Return list return $option; }
This function works by calling the get_pages() function in order to retrieve the pages that are children to this page. The echo argument is also used and given a 0 to make the function return the array of pages rather than just print them out. To use this function create some pages that have children and pick a page (in this instance page ID 29) you want to print out like this.
print getChildPagesList(29);
To print out the pages connected to the current post use the following:
echo getChildPagesList($post->ID);
Comments
Couldn't you use wp_list_pages with the 'child_of' parameter included?
So the equivalent examples would be:
wp_list_pages('child_of=29');
wp_list_pages('child_of='.$post->ID);
and you can also choose whether or not to print out the returned pages with the argument 'echo=1' or 'echo=0'.
You are quite right, wp_list_pages() would do the job just as well. I'm sure there was a very good reason that I created this function, although I'm not sure what it was now. :)
You can use this plugin http://wordpress.org/extend/plugins/rv-submenus/ to get submenus of main menu!