During this WordPress theme development (based on thematic), I was looking for how to create a nice parent page. Basically in the navigation menu there is a page “Projects” and each project is a subpage. But you have to create the “Projects” page content to describe what is this part (you also can redirect to the first child page, but I dont like it).
Anyway, this function displays each child page title, link and a description. The description is stored in a custom field “desc” in each subpage.
About
This function is actually easy but could help you to save some time.
The function is based on get_pages(). To make it works you need to create a page and some child page. In each child page create a custom field with the key “desc” and fill the value with a little description.
Install
Add this function is your functions.php.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44 <?php
/*
* Template Parent Page
**************************************************/
function sigerr_display_subpage_list($parentID)
{
//Get all the child page of the current page
$pages = get_pages('child_of='.$parentID.'&sort_column=post_date&&sort_order=asc&echo=0');
?>
<div id="childpagelist" class="">
<?php
//Echo the list
foreach($pages as $page) {
$link = get_permalink($page->ID);
?>
<h2>
<a href="<?php echo $link ?>" title="See the entire page about <?php echo $page->post_title; ?>">
<?php echo $page->post_title; ?>
</a>
</h2>
<p>
<?php if( get_post_meta($page->ID, "desc", true) ){
echo get_post_meta($page->ID, "desc", true);
}else{
echo "No details available, let's check that page!";
}?>
<p>See: <a href="<?php echo $link ?>"><?php echo $link ?></a></p>
</p>
<?php
}
?>
</div>
<?php
}
?>
This function is now available in your theme
Create a Template Page
Create a new template for wordpress page. If you dont know how, just copy your page.php file and rename it in ‘template-page-parent.php’.
Then add this at the very top of the file.
1
2
3
4
5
6
7
8
9 <?php
/**
* Template Name: Parent
*
* This template display a list of each child page with details.
* Details are stored in a custon field 'desc' in child pages
*
*/
?>
Then locate the piece of code “the_content()”. This function print the content of the post. You should probably print the list just after this function.
<?php display_subpage_list($post->ID) ?>
This function print the list into a div#childpagelist.
If you get any trouble, feel free to leave a comment.