Reversing the order of posts AFTER the query is performed

I’m am displaying the last 5 posts of a custom post type ‘show’.

This gives me the latest post first.

Read More
<?php
$args = array(
    'post_type' => 'show',
    'posts_per_page' => 5,
    'order' => 'DESC'
    );
$home_shows = new WP_Query($args);
var_dump($home_shows);
?>

What I need is to actually have the earliest (of the array of the latest shows) first, and the latest show (in that array of latest shows) last.

I am now currently getting (the show date via a custom field meta value):

3/11/12, 3/7/12, 3/4/12, 3/2/12, 2/30/12
etc.

I need:
2/30/12,
3/1/12,
3/4/12,
3/7/12,
3/11/12,

I tried using php’s array_reverse like so (added to the above code):

$reversed_shows = array_reverse( $home_shows->posts );

Which gave me really odd results (displayed completely different parts of the post, array order was off).

Any ideas?

Related posts

Leave a Reply

3 comments

  1. I figured out what I was doing wrong. A simple beginners mistake.

    Array_reverse was working properly, but I wasn’t then reassigning the reversed array back to the $home_shows WP_Query, hence not seeing any change.

    Here is the answer, and my revised code.

    <?php
                        $args = array(
                            'post_type' => 'show',
                            'posts_per_page' => 5,
                            'order' => 'DESC',
                        );
                        $home_shows = new WP_Query($args);
                        //reverse the order of the posts, latest last
                        $array_rev = array_reverse($home_shows->posts);
                        //reassign the reversed posts array to the $home_shows object
                        $home_shows->posts = $array_rev;
                    ?>
                    <?php $captions = array(); ?>
                    <?php if ( $home_shows->have_posts() ) : ?>         
                        <?php while ( $home_shows->have_posts() ) : $home_shows->the_post(); ?>
    

    Thanks for the replies, glad I figured this one out.

  2.     <?php
        $args = array(
            'post_type' => 'show',
            'posts_per_page' => 5,
            'order' => 'desc'
            );
        $home_shows = new WP_Query($args);
     //   var_dump($home_shows);
    
    echo "<pre>";
    print_r($home_shows->posts);
    echo "</pre>";
    
    
    
    $array_rev = array_reverse($home_shows->posts);
    echo "<pre>";
    print_r($array_rev);
    echo "</pre>";
      ?>
    

    I tried above for my custom post type…

    results post ids : 240,239,238,237
    for reverse : 237,238,239,240

    There must be something else in proble at your end……