最新消息:Welcome to the puzzle paradise for programmers! Here, a well-designed puzzle awaits you. From code logic puzzles to algorithmic challenges, each level is closely centered on the programmer's expertise and skills. Whether you're a novice programmer or an experienced tech guru, you'll find your own challenges on this site. In the process of solving puzzles, you can not only exercise your thinking skills, but also deepen your understanding and application of programming knowledge. Come to start this puzzle journey full of wisdom and challenges, with many programmers to compete with each other and show your programming wisdom! Translated with DeepL.com (free version)

php - Generate an array of parentchild page IDs, based on parent page name

matteradmin5PV0评论

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): /

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/snippets/wordpress/if-page-is-parent-or-child/

Share Improve this question edited Mar 27, 2019 at 17:58 Graeme Bryson asked Mar 27, 2019 at 16:22 Graeme BrysonGraeme Bryson 291 silver badge11 bronze badges
Add a comment  | 

1 Answer 1

Reset to default 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;
}
Post a comment

comment list (0)

  1. No comments so far