Bạn sẽ cần lặp lại các bài đăng đó và sau đó thực hiện nhiều truy vấn hơn cho mỗi bài đăng, lặp lại cho đến khi bạn không tìm thấy bài đăng nào trong truy vấn.
ví dụ
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>';
Có, hàm trên tự gọi, đây là hàm đệ quy. Nó sẽ tiếp tục tự gọi cho đến khi nó đạt đến điểm mà bài đăng đang xem không có con, sau đó nó sẽ quay lại mà không tự gọi, và toàn bộ ngăn xếp sẽ bong bóng trở lại xây dựng mảng trẻ em. Bạn sẽ làm tốt để nghiên cứu sâu hơn trong lĩnh vực này.
Lưu ý rằng có một chi phí vốn có cho những gì bạn muốn, bất kể bạn có sử dụng các hàm đệ quy hay không, có liên quan đến số lượng bài đăng bạn có. 5 cấp độ của bài viết sẽ đắt hơn 2, và nó không phải là một tỷ lệ tuyến tính. Bạn có thể muốn sử dụng tạm thời để lưu trữ đầu ra của mình tùy thuộc vào cách bạn thực hiện việc này.
Một cách khác để giảm chi phí là chỉ nhìn xuống cây bài viết một số cấp độ nhất định, ví dụ như cháu nhưng không có cháu chắt. Điều này có thể được thực hiện bằng cách chuyển vào một tham số độ sâu và giảm nó trên mỗi cuộc gọi đệ quy, đảm bảo trả về một mảng trống khi bắt đầu nếu độ sâu bằng 0 hoặc thấp hơn. Nhiều hướng dẫn về các hàm đệ quy sử dụng điều này làm ví dụ.