您需要在这些帖子上循环,然后对每个帖子进行更多查询,重复操作,直到在查询中找不到帖子为止。
e、 g。
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或更低,请确保在开始时返回一个空数组。许多递归函数教程都以此为例。