Show only 2nd level of navigation depending on active navigation

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?

Read More

I don’t want a plugin that does/helps with this (I don’t like to have my template “depend” on a plugin)

Related posts

Leave a Reply

1 comment

  1. 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');
    
    ?>