1

I am looking for a way to output all page IDs from the following menu:

<?php wp_list_pages('depth=1&exclude='3,5,11')); ?>

Only top level pages needed, therefore the 'depth=1'.

Any help appreciated.

3 Answers 3

4

wp_list_pages() is for formatted markup. Use get_pages() and wp_list_pluck():

$pages = get_pages(
    array (
        'parent'  => 0, // replaces 'depth' => 1,
        'exclude' => '3,5,11'
    )
);

$ids = wp_list_pluck( $pages, 'ID' );

$ids holds an array of page IDs now.

3
  • +1 for showing me the wp_list_pluck() function. Nice. Never knew about that one before.
    – GhostToast
    Commented May 30, 2013 at 21:16
  • @GhostToast Yeah, that’s really handy. :)
    – fuxia
    Commented May 30, 2013 at 21:18
  • When I run this code, I get child pages as well as top level ones. I've checked a couple of times to confirm. get_pages is returning all pages, not just the top level pages-- the post_parent === 0 ones.
    – s_ha_dum
    Commented May 30, 2013 at 21:34
3

You can do this with WP_Query:

$args = array(
  'post_type' => 'page',
  'post_parent' => 0,
  'fields' => 'ids',
  'posts_per_page' => -1,
  'post__not_in' => array('3','5','11'),
);
$qry = new WP_Query($args);
var_dump($qry->posts);

As you can see from the var_dump, $qry->posts is an array of IDs

Reference:

http://codex.wordpress.org/Class_Reference/WP_Query

0
$pages = get_pages(
    array (
        'parent'   => 0, /* it gives only child of current page id */
        'child_of' => 'parent or page_ID' /* Return child of child for page id. */
    )
);
$ids = wp_list_pluck( $pages, 'ID' );
1
  • The question was about the top level menu elements though. Is child_of correct? What would be the parent ID there?
    – Rup
    Commented Nov 9, 2021 at 9:44

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.