To check a Page by ID for that Page or its direct descendants (sub/child pages)
// To check a Page by ID for that Page or its direct descendants (sub/child pages) | |
function is_tree( $pid ) { // $pid = The ID of the page we're looking for pages underneath | |
global $post; // load details about this page | |
if( is_page() && ( $post->post_parent == $pid || is_page( $pid ) ) ) | |
return true; // we're at the page or at a sub page | |
else | |
return false; // we're elsewhere | |
} |
Usage: if ( is_tree( 645 ) ) {}
or to check by ID or slug or title:
/** | |
* Child page conditional | |
* @ Accept's page ID, page slug or page title as parameters | |
*/ | |
function is_child( $parent = '' ) { | |
global $post; | |
$parent_obj = get_page( $post->post_parent, ARRAY_A ); | |
$parent = (string) $parent; | |
$parent_array = (array) $parent; | |
if ( in_array( (string) $parent_obj['ID'], $parent_array ) ) { | |
return true; | |
} elseif ( in_array( (string) $parent_obj['post_title'], $parent_array ) ) { | |
return true; | |
} elseif ( in_array( (string) $parent_obj['post_name'], $parent_array ) ) { | |
return true; | |
} else { | |
return false; | |
} | |
} |
Usage:
if ( is_child( 645 ) ) {}
or if ( is_child( 'Services' ) ) {}
or if ( is_child( 'our-services' ) ) {}
To check a Page by ID for that Page or any/all of its child pages (incl. grandchildren)
// To check a Page by ID and all its child Pages incl. grand children | |
function is_tree( $pid ) { // $pid = The ID of the page we're looking for pages underneath | |
global $post; // load details about this page | |
$anc = get_post_ancestors( $post->ID ); | |
foreach( $anc as $ancestor ) { | |
if ( is_page() && $ancestor == $pid ) { | |
return true; | |
} | |
} | |
if ( is_page() && ( is_page ( $pid ) ) ) { | |
return true; // we're at the page or at a sub page | |
} | |
else { | |
return false; // we're elsewhere | |
} | |
} |
To check a Page by ID if it is an ancestor
function is_ancestor( $post_id ) { | |
global $wp_query; | |
$ancestors = $wp_query->post->ancestors; | |
if ( in_array( $post_id, $ancestors ) ) { | |
$return = true; | |
} else { | |
$return = false; | |
} | |
return $return; | |
} |
Sources:
https://css-tricks.com/snippets/wordpress/if-page-is-parent-or-child/
http://www.kevinleary.net/wordpress-is_child-for-advanced-navigation/