Generate an array of parent/child page IDs, based on parent page name

I’ve been using the following functions (updating IDs manually) to group parent & child pages into an array, which I then use in an if/else statement to present content depending on whether or not the current page is in that array. Examples below:

function id_array_function() {
    $array = array(
    10, // Example Parent ID
    12, // Example Child ID
    14  // Example Child ID
  );
    return $array;
}
function content_placement_function() {
    if( is_page( id_array_example() ) ) {
    // If current page is in array, do this
    }
    else {
    // Otherwise, do this
    }
}

Ideally, I’d like to create a reusable function which I can plug any page name into (avoiding IDs due to issues with local/production installs having different page IDs), and return an array of both the parent and any child page names for use elsewhere, such as:

if( is_page( id_array_function('About') ) ) { 
  // Function would return array as ('About', 'Our Company', 'Careers', 'etc...')
  // If current page is in array, do this
}

I’ve attempted this with wp_list_pages (could not return, only echo), and get_posts/get_terms (both returned empty arrays). If anyone has a pre-existing snippet or an idea as to how I could achieve the reusable function, I’d be massively appreciative of the help.

==========

EDIT: Working answer from Krzysiek below. Possible alternative option on CSS Tricks (targeting IDs): https://css-tricks.com/snippets/wordpress/if-page-is-parent-or-child/

1 Answer
1

OK, so what we want to achieve is to write a function that will take a title of a page and return the array containing its ID and IDs of its children. So here’s the code:

function get_page_and_its_children_ids_by_title( $page_title ) {
    $result = array();

    $page = get_page_by_title( $page_title );  // find page with given title
    if ( $page ) {  // if that page exists
        $result[] = $page->ID;  // add its ID to the result
        $children = get_children( array(  // get its children 
            'post_parent' => $page->ID,
            'post_type'   => 'page', 
            'numberposts' => -1,
            'post_status' => 'publish' 
        ) );
        $result = array_merge( $result, array_keys( $children ) );  // add children ids to the result
    }

    return $result;
}

Leave a Comment