Você precisará fazer um loop sobre essas postagens e, em seguida, fazer mais consultas para cada postagem, repetindo até encontrar nenhuma postagem em uma consulta.
por exemplo
function get_posts_children($parent_id){
$children = array();
// grab the posts children
$posts = get_posts( array( 'numberposts' => -1, 'post_status' => 'publish', 'post_type' => 'microsite', 'post_parent' => $parent_id, 'suppress_filters' => false ));
// now grab the grand children
foreach( $posts as $child ){
// recursion!! hurrah
$gchildren = get_posts_children($child->ID);
// merge the grand children into the children array
if( !empty($gchildren) ) {
$children = array_merge($children, $gchildren);
}
}
// merge in the direct descendants we found earlier
$children = array_merge($children,$posts);
return $children;
}
// example of using above, lets call it and print out the results
$descendants = get_posts_children($post->ID);
echo '<pre>';
print_r($descendants);
echo '</pre>';
Sim, a função acima chama a si mesma, é uma função recursiva. Ele continuará chamando a si próprio até chegar a um ponto em que a postagem que está sendo visualizada não tem filhos, depois retornará sem chamar a si mesma, e toda a pilha voltará a formar a matriz de filhos. Você faria bem em fazer mais pesquisas nessa área.
Observe que há um custo inerente ao que você deseja, independentemente de você usar funções recursivas ou não, que está atrelado a quantos níveis de postagens você possui. 5 níveis de postagens serão mais caros que 2 e não é uma escala linear. Você pode usar transitórios para armazenar em cache sua saída, dependendo de como fazer isso.
Outra maneira de reduzir o custo é apenas olhando para baixo da árvore dos postos um certo número de níveis, por exemplo, netos, mas não bisnetos. Isso pode ser feito passando um parâmetro de profundidade e diminuindo-o em cada chamada recursiva, certificando-se de retornar uma matriz vazia no início, se a profundidade for 0 ou menor. Muitos tutoriais sobre funções recursivas usam isso como um exemplo.