how to display all child page by parent ID in WordPress


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().


Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d bloggers like this: