get all page IDs from wp_list_pages

The question:

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.

The Solutions:

Below are the methods you can try. The first solution is probably the best. Try others if the first one doesn’t work. Senior developers aren’t just copying/pasting – they read the methods carefully & apply them wisely to each case.

Method 1

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.

Method 2

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);

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


Method 3

$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' );

All methods was sourced from or, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

Leave a Comment