For example, suppose a menu like so:
Parent 1
Child A
Child B
Parent 1
Child C
Child D
Child E
Parent 2
Child F
In a certain part of my template, I want something to show depending on the current “location” in the menu. If the user is on the Parent 1
, Child C
, Child D
, or Child E
pages, then I want a little menu to show up that says Parent 1
as the header and the children as the links. I’ve tried a variety of things (creating a custom walker object, writing css to just not show the items that shouldn’t show, etc.) Also, if there are no children at all, then I don’t want to display the parent even on the parent’s own page. Does this make sense?
I don’t want a plugin that does/helps with this (I don’t like to have my template “depend” on a plugin)
1 Answer
Try this – I’ve not implemented it fully, but I have tested it and it seems to work. Place it in your functions.php and call <?php list_child_pages(); ?>
in your template or use the shortcode [childpages]
in your editor.
<?php
// List Child pages of a parent.
function list_child_pages() {
global $post;
if ( is_page() && $post->post_parent )
$childpages = wp_list_pages( 'sort_column=menu_order&title_li=&child_of=" . $post->post_parent . "&echo=0' );
else
$childpages = wp_list_pages( 'sort_column=menu_order&title_li=&child_of=" . $post->ID . "&echo=0' );
if ( $childpages ) { ?>
<menu>
<ul class="side-nav">
<?php echo $string = $childpages; ?>
</ul>
</menu>
<?php
}
return $string;
}
// Add Shortcode for additional support, not just in the theme template
add_shortcode('childpages', 'list_child_pages');
?>