Showing an array of certain pages with WP_Query in WordPress

What I’m trying to achieve is showing only certain pages in a loop. 3 certain pages, not more, not less.

I’ve tried many things but I just can’t complete it.

Read More
<?php
    $special_tabs = new WP_Query(array ('post_type'=>'page','post__in'=>array(100,102,104)))
?>

What this does, from what I understand, is that it shows an array of pages and then includes those ID’s there as well.

<?php
    $special_tabs = new WP_Query('page_id=100');
?>

And this shows only ONE certain page, it doesn’t support the showing of array of different IDs.

I’m sure I am not the first person to have such specific needs and I’m certain there is a relatively simple way to achieve what I’m trying to achieve, but I just can’t come up with a solution or to find one. Can anybody please help me with this?

Many thanks in advance!

Related posts

Leave a Reply

2 comments

  1. just wondering if it would be better to use something like get_pages() instead of creating a new wp_query()?

    using this little piece of code you can generate a list of pages you desire..

    <ul>
    <?php $special_tabs = get_pages ('sort_column=post_title&echo=0&include=2,3,4&title_li='); ?>
    <?php 
    foreach ($special_tabs as $tab) {
      $title = $tab->post_title;
      echo "<li>".$title."</li>";
    }
    ?>
    </ul>
    

    if you do a print_r on the $special_tab variable you will get following array

    </php
    echo"<pre>";
    echo print_r($special_tabs);
    echo"</pre>";
    ?>
    
    
        Array
    (
        [0] => stdClass Object
            (
                [ID] => 2
                [post_author] => 1
                [post_date] => 2010-03-24 15:26:18
                [post_date_gmt] => 2010-03-24 15:26:18
                [post_content] => This is an example of a WordPress page.
                [post_title] => About
                [post_excerpt] => 
                [post_status] => publish
                [comment_status] => open
                [ping_status] => open
                [post_password] => 
                [post_name] => about
                [to_ping] => 
                [pinged] => 
                [post_modified] => 2010-03-24 15:26:18
                [post_modified_gmt] => 2010-03-24 15:26:18
                [post_content_filtered] => 
                [post_parent] => 0
                [guid] => http://example.com/about/
                [menu_order] => 0
                [post_type] => page
                [post_mime_type] => 
                [comment_count] => 0
                [filter] => raw
            )
    
        [1] => stdClass Object
            (
                [ID] => 3
                [post_author] => 1
                [post_date] => 2010-03-27 10:48:29
                [post_date_gmt] => 2010-03-27 10:48:29
                [post_content] => 
                [post_title] => testpage1
                [post_excerpt] => 
                [post_status] => publish
                [comment_status] => open
                [ping_status] => open
                [post_password] => 
                [post_name] => testpage1
                [to_ping] => 
                [pinged] => 
                [post_modified] => 2010-03-27 10:48:29
                [post_modified_gmt] => 2010-03-27 10:48:29
                [post_content_filtered] => 
                [post_parent] => 0
                [guid] => http://example.com/testpage1/
                [menu_order] => 0
                [post_type] => page
                [post_mime_type] => 
                [comment_count] => 0
                [filter] => raw
            )
    
        [2] => stdClass Object
            (
                [ID] => 4
                [post_author] => 1
                [post_date] => 2010-03-27 10:56:26
                [post_date_gmt] => 2010-03-27 10:56:26
                [post_content] => 
                [post_title] => testpage2
                [post_excerpt] => 
                [post_status] => publish
                [comment_status] => open
                [ping_status] => open
                [post_password] => 
                [post_name] => testpage2
                [to_ping] => 
                [pinged] => 
                [post_modified] => 2010-03-27 10:56:26
                [post_modified_gmt] => 2010-03-27 10:56:26
                [post_content_filtered] => 
                [post_parent] => 0
                [guid] => http://example.com/testpage2/
                [menu_order] => 0
                [post_type] => page
                [post_mime_type] => 
                [comment_count] => 0
                [filter] => raw
            )
    
    )
    

    hopefully this is something you can use.. 🙂
    just remember to include YOUR PAGE ID’s inside get_pages() include section, instead of the 2,3,4 thats their already…

    ref: http://codex.wordpress.org/Function_Reference/get_pages

  2. Here is an answer for 2+ months old question:

    You want to show certain pages, so what about to calling WP_Query for each page in a foreach:

    $certain_pages = array(100,102,104);
    foreach( $certain_pages as $a_page ) {
        $special_tabs = new WP_Query('page_id='.$a_page);
        /* (sample) loop goes here */
        if ($special_tabs->have_posts()) : while ($special_tabs->have_posts()) : $special_tabs->the_post();
            the_content();
        endwhile; endif;
        /* loop ends */
    }
    

    Don’t worry for calling the loop many times, it’s effect even can’t be noticed in this scale.