WordPress Version: 5.6
/**
* Retrieves the IDs of the ancestors of a post.
*
* @since 2.5.0
*
* @param int|WP_Post $post Post ID or post object.
* @return int[] Array of ancestor IDs or empty array if there are none.
*/
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;
}