Before you mark this as duplicate I have tried every method in all the other questions and non of them have worked.

I am trying to exclude any page with the page template page-noindex.php from the wp_list_pages(); query.

The below code does not work and when I echo out $the_query it just displays 'Array'.

        $the_query = array(
            'post_type'  => 'page',  /* overrides default 'post' */
            'meta_key'   => '_wp_page_template',
            'meta_value' => 'page-templates/page-noindex.php'

        $args = array(
            'exclude'      => $the_query,
            'title_li'     => '',
            'sort_column'  => 'menu_order, post_title',
            'post_type'    => 'page',
                'post_status'  => 'publish' 
        ); ?>

    <?php wp_list_pages($args) ?>
  • 1
    Exclude does not accept an array. It only accepts a comma separated list of page IDs. Also, you can not echo an array. You should use print_r($the_query) instead. – Jack Johansson Aug 21 '17 at 21:08

Daniel, exclude parameter doesn't accept array.

Use your code this way:

$exclude = [];
foreach(get_pages(['meta_key' => '_wp_page_template', 'meta_value' => 'page-templates/page-noindex.php']) as $page) {
    $exclude[] = $page->post_id;

$args = array(
    'exclude'      => implode(",", $exclude),
    'title_li'     => '',
    'sort_column'  => 'menu_order, post_title',
    'post_type'    => 'page',
    'post_status'  => 'publish'

I think you can refactor it better for your needs

  • Thanks ever so much! This works a charm, I was just copying what others had put on here using an array, thanks for pointing out thats why it doesn't work! – Daniel Vickers Aug 21 '17 at 21:27

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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