Tendrá que recorrer esas publicaciones y luego hacer más consultas para cada publicación, repitiendo hasta que no encuentre publicaciones en una consulta.
p.ej
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>';
Sí, la función anterior se llama a sí misma, es una función recursiva. Continuará llamándose a sí mismo hasta que llegue a un punto en el que la publicación que se está mirando no tiene hijos, luego regresará sin llamarse a sí mismo, y toda la pila volverá a burbujear construyendo la matriz de hijos. Sería bueno hacer más investigaciones en esta área.
Tenga en cuenta que hay un costo inherente a lo que desea, independientemente de si usa funciones recursivas o no, que está relacionado con la cantidad de niveles de publicaciones que tiene. 5 niveles de publicaciones serán más costosas que 2, y no es una escala lineal. Es posible que desee utilizar transitorios para almacenar en caché su salida dependiendo de cómo lo haga.
Otra forma de reducir el costo es solo mirando hacia abajo en el árbol de publicaciones un cierto número de niveles, por ejemplo, nietos pero no bisnietos. Esto se puede hacer pasando un parámetro de profundidad y decrementándolo en cada llamada recursiva, asegurándose de devolver una matriz vacía al inicio si la profundidad es 0 o menor. Muchos tutoriales sobre funciones recursivas usan esto como un ejemplo.