di wordpress kita mengenal beberapa post_type default, yaitu post, pages, media, & menus. setiap post_type ini mempunyai jenis yang berbeda/ kegunaan khusus. pages adalah satu-satunya post_type default yang mempunyai feature page attribute. dengan fitur ini kita bisa membuat sebuah page konten memiliki hirarki, seperti tree.
fitur page attribut ini memungkinkan kita untuk membuat page parent & page child. dengan level depth unlimited, sesuai kebutuhan kita. tapi kadang level depth parent page ini menjadi kendala ketika kita ingin menampilkan semua child dr sebuah parent.
ada beberapa cara yang bisa di jadikan solusi untu menampilkan semua page child. pendekatan khusus yang akan kita coba kali ini dengan memanfaatkan pengulangan & array().
berikut adalah function untuk menampilkan semua child page wordpress dari sebuah page. adapun parameter yang dibutuhkan yaitu ID dari parent tersebut.
<?php function get_posts_children($parent_id){ $children = array(); // grab the posts children $posts = get_posts( array( 'numberposts' => -1, 'post_status' => 'publish', 'post_type' => 'page', 'post_parent' => $parent_id, 'suppress_filters' => false, // optional if you want order by meta value //'meta_key' => 'start_time', //'orderby' => 'meta_value', //'order' => 'ASC' )); // 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; }
function di atas bisa untuk custome post_type dengan argument standard untuk get_posts().