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.
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.
wp_list_pluck()
function. Nice. Never knew about that one before.
Commented
May 30, 2013 at 21:16
get_pages
is returning all pages, not just the top level pages-- the post_parent === 0
ones.
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 ID
s
$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' );