views:

348

answers:

2

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.

<?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!

A: 

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

Marty
Thanks a lot, Marty. It definitely seems working. But I think creating the wp_query just seems a bit easier than the solution you gave. But I still am very grateful for your help. I will keep this solution in mind whenever I'm doing something with the pages.Thing is, I need to display several pages in several different places. One of them was the special_tabs section, I have 2-3 other places.
Ragnar
A: 

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.

gasoved