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);
var_dump($qry->posts);
As you can see from the var_dump
, $qry->posts
is an array of ID
s
Reference:
http://codex.wordpress.org/Class_Reference/WP_Query
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 stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0