Title: Query Posts then put into Array
Last modified: August 18, 2016

---

# Query Posts then put into Array

 *  Resolved [sparkydude03](https://wordpress.org/support/users/sparkydude03/)
 * (@sparkydude03)
 * [18 years, 4 months ago](https://wordpress.org/support/topic/query-posts-then-put-into-array/)
 * I need to query the wordpress database to get the top 14 (or 14 most recent) 
   posts and have them be displayed as the top five recent, and then the rest smaller
   and on a different portion of the page. Can anyone give me a hand with this?

Viewing 6 replies - 1 through 6 (of 6 total)

 *  [Kafkaesqui](https://wordpress.org/support/users/kafkaesqui/)
 * (@kafkaesqui)
 * [18 years, 4 months ago](https://wordpress.org/support/topic/query-posts-then-put-into-array/#post-660441)
 * Query the database? Will this occur in a regular theme template, or an external(
   to WordPress) PHP document?
 * Within a WP template you can query posts and assign that to a(n object) variable
   pretty simply with:
 * `<?php $posts_query = new WP_Query('showposts=14'); ?>`
 * Reference: [http://codex.wordpress.org/Function_Reference/WP_Query](http://codex.wordpress.org/Function_Reference/WP_Query)
 * To display only the initial (top) five posts, that loop would begin like so:
 *     ```
       <?php
       while( $posts_query->have_posts() && ($post_count < 5) ) :
       $posts_query->the_post();
       $post_count++;
       ?>
       ```
   
 * Not only do we test for have_posts() on the $posts_query object we’ve created,
   but also on $post_count, which increments with each iteration of the while loop(
   we want it to be _less than 5_ because $post_count will initially be 0 (null)).
   The loop will halt at post #5, and start at post #6 in your second loop:
 *     ```
       <?php
       while( $posts_query->have_posts() ) :
       $posts_query->the_post();
       ?>
       ```
   
 * When placing the second loop in a different template (say sidebar.php), it’s 
   possible the $posts_query object won’t carry over to it. In that case, scope 
   it to global before assigning it:
 *     ```
       <?php
       global $posts_query;
       $posts_query = new WP_Query('showposts=14');
       ?>
       ```
   
 * Then do the same before the second loop:
 *     ```
       <?php
       global $posts_query;
       while( $posts_query->have_posts() ) :
       $posts_query->the_post();
       ?>
       ```
   
 *  Thread Starter [sparkydude03](https://wordpress.org/support/users/sparkydude03/)
 * (@sparkydude03)
 * [18 years, 4 months ago](https://wordpress.org/support/topic/query-posts-then-put-into-array/#post-660443)
 * That part makes sense, but I wanted to store the post data in an array so I could
   display the title of a post as a link to the actual page of the post.
 * My posts appear on my homepage showing three things: title of post (as a link
   to the page), date, and a small paragraph excerpt. That is how I want the top
   5 posts to remain, but the remaining 9 posts need to only have the title as a
   link and the date. Is there a way I can do this without writing a custom query?
 *  [Kafkaesqui](https://wordpress.org/support/users/kafkaesqui/)
 * (@kafkaesqui)
 * [18 years, 4 months ago](https://wordpress.org/support/topic/query-posts-then-put-into-array/#post-660445)
 * “_Is there a way I can do this without writing a custom query?_“
 *     ```
       <?php while( have_posts() ) : the_post(); $post_count++; ?>
       <?php if($post_count <= 5) : ?>
       ```
   
 * `FIRST FIVE POSTS`
 * `<?php else : ?>`
 * `LATTER NINE POSTS`
 *     ```
       <?php endif; ?>
       <?php endwhile; ?>
       ```
   
 * No need for an array (so to speak). You just need to test off of $post_count 
   to decide how the ‘current’ post is to be displayed.
 *  Thread Starter [sparkydude03](https://wordpress.org/support/users/sparkydude03/)
 * (@sparkydude03)
 * [18 years, 4 months ago](https://wordpress.org/support/topic/query-posts-then-put-into-array/#post-660450)
 * Thanks this helps a ton! The only concern I have is the code that is the rest
   of the page. The first five posts show up great, but after that I need to put
   in the code for the middle of my page. Then the remaining posts are put in. This
   loop makes it so it repeats all the code of my page over and over. Would I be
   better of writing the post data to a remote file and then including it when I
   need it later in the page?
 *  [Kafkaesqui](https://wordpress.org/support/users/kafkaesqui/)
 * (@kafkaesqui)
 * [18 years, 4 months ago](https://wordpress.org/support/topic/query-posts-then-put-into-array/#post-660552)
 * “_The first five posts show up great, but after that I need to put in the code
   for the middle of my page._“
 *     ```
       <?php while( have_posts() ) : the_post(); $post_count++; ?>
       <?php if($post_count <= 5) : ?>
   
       FIRST FIVE POSTS
   
       <?php if($post_count == 5) : ?>
       CLOSING TAGS TO FIRST FIVE POSTS (IF NEEDED)
       MIDDLE SECTION
       OPENING TAGS TO LATTER NINE POSTS (IF NEEDED)
       <?php endif; ?>
       <?php else : ?>
   
       LATTER NINE POSTS
   
       <?php endif; ?>
       <?php endwhile; ?>
       ```
   
 *  [karimun](https://wordpress.org/support/users/karimun/)
 * (@karimun)
 * [18 years, 1 month ago](https://wordpress.org/support/topic/query-posts-then-put-into-array/#post-660813)
 * I have played a bit with actual request of this post. Yes it is of course possible
   to store the post data in an array.
 * Heres a VERY basic way of doing it:
 *     ```
       $array = array();
       query_posts("showposts=-1&order=asc"); ?>
       <?php if (have_posts()) : ?><?php while (have_posts()) : the_post(); ?>
       <?php if (in_category(4)){ ?>
       <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a><br>
       <?php } ?>
       <?php if (in_category(3)){
       $permalink = get_permalink();
       $title = get_the_title();
       array_push($array,$permalink,$title);
        } ?>
       <?php endwhile; ?><?php endif; ?>
       ```
   
 * And now output the array somewhere else:
 *     ```
       $Arraypointer = -1;
       while (++$Arraypointer <= count($array)){ ?>
       <a href="<?php echo $array[$Arraypointer]; $Arraypointer++; ?>"> <?php echo $array[$Arraypointer]; ?></a><br>
       <?php }?>
       ```
   
 * I could imaging associative arrays provide you with more flexibility here.
 * BUT: I agree with Kafkaesqui. Its wise to handle things in the loop like he described
   it.

Viewing 6 replies - 1 through 6 (of 6 total)

The topic ‘Query Posts then put into Array’ is closed to new replies.

## Tags

 * [advanced](https://wordpress.org/support/topic-tag/advanced/)
 * [array](https://wordpress.org/support/topic-tag/array/)
 * [query](https://wordpress.org/support/topic-tag/query/)

 * In: [Developing with WordPress](https://wordpress.org/support/forum/wp-advanced/)
 * 6 replies
 * 3 participants
 * Last reply from: [karimun](https://wordpress.org/support/users/karimun/)
 * Last activity: [18 years, 1 month ago](https://wordpress.org/support/topic/query-posts-then-put-into-array/#post-660813)
 * Status: resolved

## Topics

### Topics with no replies

### Non-support topics

### Resolved topics

### Unresolved topics

### All topics
