Вам нужно будет зациклить эти сообщения, а затем делать больше запросов для каждого сообщения, повторяя до тех пор, пока вы не найдете ни одного сообщения в запросе.
например
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>';
Да, вышеупомянутая функция вызывает себя, это рекурсивная функция. Он будет продолжать вызывать себя до тех пор, пока не достигнет точки, в которой у просматриваемой записи не будет дочерних элементов, затем он вернется без вызова самого себя, и весь стек будет пузыриться обратно, создавая массив дочерних элементов. Вы были бы полезны для дальнейших исследований в этой области.
Обратите внимание, что то, что вы хотите, связано с тем, что вы хотите, независимо от того, используете ли вы рекурсивные функции или нет, это зависит от того, сколько уровней постов у вас есть. 5 уровней сообщений будут стоить больше, чем 2, и это не линейное масштабирование. Вы можете использовать переходные процессы для кэширования вашего вывода в зависимости от того, как вы это делаете.
Еще один способ снизить стоимость - это просто смотреть вниз по дереву постов на определенное количество уровней, например, внуков, но не правнуков. Это можно сделать, передав параметр глубины и уменьшая его при каждом рекурсивном вызове, обязательно возвращая пустой массив в начале, если глубина равна 0 или ниже. Многие учебники по рекурсивным функциям используют это в качестве примера.