• Resolved sparkydude03

    (@sparkydude03)


    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)
  • 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

    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

    (@sparkydude03)

    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?

    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

    (@sparkydude03)

    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?

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

    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.