Retrieves the IDs of the ancestors of a post.
Parameters
$post
int|WP_Postrequired- Post ID or post object.
Source
function get_post_ancestors( $post ) {
$post = get_post( $post );
if ( ! $post || empty( $post->post_parent ) || $post->post_parent == $post->ID ) {
return array();
}
$ancestors = array();
$id = $post->post_parent;
$ancestors[] = $id;
while ( $ancestor = get_post( $id ) ) {
// Loop detection: If the ancestor has been seen before, break.
if ( empty( $ancestor->post_parent ) || ( $ancestor->post_parent == $post->ID ) || in_array( $ancestor->post_parent, $ancestors, true ) ) {
break;
}
$id = $ancestor->post_parent;
$ancestors[] = $id;
}
return $ancestors;
}
Changelog
Version | Description |
---|---|
2.5.0 | Introduced. |
Get Ancestors Page Thumbnail
Get the top level page thumbnail and display it!
Get Ancestors Page Slug
This example returns the highest page
{slug}
in a tree and uses it as a Body_Class, so the parent and all children will have the same Body Class!This example for a twenty eleven child theme in the
header.php
fileGet Ancestors Post Meta
If we did not want to use the page slug, we could use a custom field eg:
body_class
, on the top level page and set the class in the post meta.Suppose we have this pages structure:
[0] => int(1090) [1] => int(997) [2] => int(107)
So, if you want to get its direct parent page, then use the first element, or use the last element if you want to get the top level page.