WordPress.org

Ready to get started?Download WordPress

Forums

Parent/Children Navigation (6 posts)

  1. equalmark
    Member
    Posted 4 years ago #

    Hi there,

    In my sidebar I want to list child pages of the current page. Therefore I am checking to see whether a page is a subpage or not using the code here:

    http://codex.wordpress.org/Conditional_Tags#Testing_for_sub-Pages

    The problem is, is that if a page is a sub page and also has sub pages then it only returns as being a sub page and not a parent of other pages.

    Basically I want it so that when you click on a page the sidebar shows any subpages. If there are no sub pages at the top level then nothing shows. If there are subpages it shows them. If one of these sub pages is clicked on and also has sub pages then the sub pages are shown. If it doesn't then other pages at the same level are shown.

    Anyone any ideas?

  2. equalmark
    Member
    Posted 4 years ago #

    Having read that back you may struggle to understand so here it is a different way. Below if what I want to do in English! Just need this translating into PHP / WordPress functions etc.

    If current page is a top level page
    Does current page have child pages?
    Yes
    Display children
    No
    Do nothing
    else
    Does current page have child pages?
    Yes
    Display children
    No
    Display parent page and other pages at the same level as parents
    End if

    Hope that helps
    Thanks

  3. equalmark
    Member
    Posted 4 years ago #

    Ok I have now managed to use this code to check what page I am on (parent or sub page):

    <?php global $post; if ( is_page() && $post->post_parent ) { ?>
     <!-- is a sub page -->
    
            <p>I am a sub page</p>
    
     <?php } else { ?>
     <!-- not a subpage -->
    
        	<p>I am a parent Page</p>
    
    <?php } ?>

    The only problem is, is that if a page is both a parent to some child pages and a sub page of a parent it only returns that it is a sub page. How could I modify this?

    I think I need something where it says "I am a sub page" that check to see if there are any children. How can I check to see if the page has children?

  4. equalmark
    Member
    Posted 4 years ago #

    This sounds so easy yet is proving so hard :(

    This code:

    http://codex.wordpress.org/Template_Tags/wp_list_pages#List_subpages_even_if_on_a_subpage

    works but only if have only 2 levels i.e. parent and child and not parent > child > grandchild.

    Anyone any solutions?

  5. equalmark
    Member
    Posted 4 years ago #

    Actually I think I can do what I want if someone could help me with a simple if else statement to check whether a page has any children. Something like:

    If has children > echo 'has children'
    else echo 'no children'

    Thanks

  6. rustyc
    Member
    Posted 4 years ago #

    I'm still working on mine, but I think I've got something along what you need.
    Mine is simply creating a menu structure, but I don't know if wordpress has a way to test for current page (I thought I saw something somewhere along those lines), otherwise use of CSS and Javascript should allow you to hide or display.

    This code does display children only under their appropriate parents. I haven't yet tested grandchildren, but that should/would be just a matter of duplicating the $children = get_pages and the subsequent conditional statement (placing the duplicated code inside the current children conditional statement / foreach loop).

    <ul>
    	<?php
    	    $include_page_ids = array('3','5','7','9','19','11','13'); //also the order of appearance
    	    for ($i = 0;$i < count($include_page_ids);$i++) {
    		$args = array('title_li'=>'','include' => $include_page_ids[$i]);
    		wp_list_pages( $args );
    		echo "<span class='zp-delimit'>|</span>";
    
    		$children = get_pages('child_of='.$include_page_ids[$i]);
     		if (count($children) > 0) {
    		    $sub = "<ul class='childul'>";
    		    foreach ($children as $child){
    			$sub .= "<li><a href='".get_page_link($child->ID)."'>";
    			$sub .= $child->post_title;
    			$sub .= "</a></li>";
    		    }
    		    $sub .="</ul>";
    		    echo $sub;
    		}
    
    	    }
    	?>
    </ul>

Topic Closed

This topic has been closed to new replies.

About this Topic