ericrasch
2/6/2013 - 3:34 PM

WordPress conditional function to check if a page is a parent/child/ancestor. In other words, if the page is within a tree of another page,

WordPress conditional function to check if a page is a parent/child/ancestor. In other words, if the page is within a tree of another page, show the code. Other code I've seen either only work with IDs, only check if it's a child, or detect all subpages (even outside of the direct tree).

<?php if ( is_tree( 'subpage' ) ) { // Using the slug /subpage/, but you could also use the ID of /subpage/ ?>
    [[... insert your code here ...]]
<?php } ?>
/* =BEGIN: Check If Page Is Parent/Child/Ancestor
    Source: http://css-tricks.com/snippets/wordpress/if-page-is-parent-or-child/#comment-172337
   ---------------------------------------------------------------------------------------------------- */
    function is_tree( $page_id_or_slug ) { // $page_id_or_slug = The ID of the page we're looking for pages underneath
        global $post; // load details about this page

        if ( !is_numeric( $page_id_or_slug ) ) { // Used this code to change a slug to an ID, but had to change is_int to is_numeric for it to work: http://bavotasan.com/2011/is_child-conditional-function-for-wordpress/
            $page = get_page_by_path( $page_id_or_slug );
            $page_id_or_slug = $page->ID;
        }

        if ( is_page() && ( $post->post_parent == $page_id_or_slug || (is_page( $page_id_or_slug ) || in_array($page_id_or_slug, $post->ancestors) ) ) )
            return true; // we're at the page or at a sub page
        else
            return false; // we're elsewhere
    };
/* =BEGIN: Check If Page Is Child
    Source: http://bavotasan.com/2011/is_child-conditional-function-for-wordpress/
   ---------------------------------------------------------------------------------------------------- */
    function is_child( $page_id_or_slug ) { // $page_id_or_slug = The ID of the page we're looking for pages underneath
	    global $post; // load details about this page

	    if ( !is_numeric( $page_id_or_slug ) ) { // Used this code to change a slug to an ID, but had to change is_int to is_numeric for it to work.
	        $page = get_page_by_path( $page_id_or_slug );
	        $page_id_or_slug = $page->ID;
	    }

	    if ( is_page() && ( $post->post_parent == $page_id_or_slug ) )
	        return true; // we're at the page or at a sub page
	    else
	        return false; // we're elsewhere
	};