admin管理员组文章数量:1125959
I'm am displaying the last 5 posts of a custom post type 'show'.
This gives me the latest post first.
<?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?
I'm am displaying the last 5 posts of a custom post type 'show'.
This gives me the latest post first.
<?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?
Share Improve this question edited Apr 3, 2012 at 4:22 Squadrons asked Apr 3, 2012 at 3:59 SquadronsSquadrons 3192 gold badges4 silver badges11 bronze badges4 Answers
Reset to default 8I 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.
Remove all the custom field mess and add an 'order' => 'ASC'
to the args array! And you're done!
<?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......
If you need to reorder the main query I suggest to use the following hook:
add_action('the_posts',function($posts,$query){
if( $query->is_main_query() ){
usort($posts,function ($a, $b) {
return strtotime($b->post_modified) - strtotime($a->post_modified);
});
}
return $posts;
},10,2);
In this example I am reordering the posts by post_modified date but you can use another logic.
本文标签: arrayReversing the order of posts AFTER the query is performed
版权声明:本文标题:array - Reversing the order of posts AFTER the query is performed 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1736670479a1946893.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论