3

I have the following:

<?php $num_cols = 2; // set the number of columns here


            $args = array(
                    'post_type' => 'testimonials',
                    'posts_per_page' => 4,
                    'orderby' => 'ID', 
                    'include' => '883, 563, 568, 106',                                  
                    'order' => ''           

                    ); 
            query_posts($args);
            if (have_posts()) :
            for ( $i=1 ; $i <= $num_cols; $i++ ) :
            echo '<div id="col-'.$i.'" class="col">';
            $counter = $num_cols + 1 - $i;
            while (have_posts()) : the_post();

            if( $counter%$num_cols == 0 ) : ?>
                <div id="box">

                <?php the_post_thumbnail('post-thumbnail', array('title' => '', 'alt' => '')); ?>



                <?php the_excerpt();?>
                </div>
                <?php endif; $counter++;
                  endwhile;
                  echo '</div>'; 
                  endfor;
                  endif; 
                wp_reset_query(); 
                ?>

I thought that simply putting the post Ids, I could have the specific posts appear, and only those posts. Unfortunately, that doesn't seem to be the case. So I was wondering if anyone knew how I can accomplish this.

Thanks in advance!

12

use post__in key instead of include to get posts from the specific post ids.

$args = array(
    'post_type' => 'testimonials',
    'posts_per_page' => 4,
    'orderby' => 'ID', 
    'post__in' => array(883, 563, 568, 106),
); 

And to order posts by the given posts ids, you can use the following array.

$args = array(
       'post_type' => 'testimonials',
       'posts_per_page' => 4,
      'orderby' => 'post__in', 
      'post__in' => array(883, 563, 568, 106),
   );
  • Thank you Milo! I managed to get the specific posts to appear, but not in that specific order. – Nina Sep 12 '11 at 19:03
  • @Nina - that's due to the way the underlying MySQL database engine works. the simplest way to get the order you want is to loop over your array of IDs, and for each ID, loop through the posts to find the matching result. your other option is more complex and requires directly modifying the SQL query to get MySQL to pull them in that specific order. – Milo Sep 12 '11 at 19:10
20
$args = array(
    'post_type' => 'testimonials',
    'posts_per_page' => 4,
    'orderby' => 'post__in', 
    'post__in' => array(883, 563, 568, 106)
); 

Using post__in within the orderby value it will honour the order of the array of IDs passed in post__in

  • 1
    Welcome to WPSE and the SE network, @stephenkeable! Exceptional formatting and a solid, concise answer. Keep up the good work ;) – bosco May 2 '13 at 20:24
  • This should be on top, as I read Milo's comment first and thought I could not easily sort by post__in. Very helpful, thanks a lot – Matthias S Nov 15 '16 at 17:41
  • this answer should be checked as right! Actual checked answer will ignore array order... just happened like that that example array is in correct order... Thx for that! – Sergei Zahharenko Nov 10 '17 at 11:42
1

for me it works removing the colon "; " and replacing for a coma "," like this:

                   'orderby' => 'post__in',
                   'post__in' => array(185, 157, 163),

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.