Inversarea ordinii postărilor DUPA executarea interogării
Afisez ultimele 5 postări ale unui custom post type 'show'.
Asta îmi oferă cea mai recentă postare prima.
<?php
$args = array(
'post_type' => 'show',
'posts_per_page' => 5,
'order' => 'DESC'
);
$home_shows = new WP_Query($args);
var_dump($home_shows);
?>
Ce am nevoie este să am cele mai vechi postări (din array-ul cu ultimele spectacole) primele, iar cel mai recent spectacol (din acel array) ultimul.
În prezent primesc (data spectacolului printr-o valoare meta custom field):
11/03/12, 7/03/12, 4/03/12, 2/03/12, 30/02/12 etc.
Am nevoie de: 30/02/12, 1/03/12, 4/03/12, 7/03/12, 11/03/12,
Am încercat să folosesc array_reverse din php astfel (adăugat la codul de mai sus):
$reversed_shows = array_reverse( $home_shows->posts );
Ceea ce mi-a dat rezultate foarte ciudate (afișa părți complet diferite ale postării, ordinea în array era greșită).
Alte idei?

Am realizat ce greșeam. O simplă greșeală de începător.
Array_reverse funcționa corect, dar nu am reatribuit apoi array-ul inversat înapoi la WP_Query-ul $home_shows, motiv pentru care nu vedeam nicio modificare.
Iată răspunsul și codul meu revizuit.
<?php
$args = array(
'post_type' => 'show',
'posts_per_page' => 5,
'order' => 'DESC',
);
$home_shows = new WP_Query($args);
//inversează ordinea postărilor, cele mai recente ultimele
$array_rev = array_reverse($home_shows->posts);
//reatribuie array-ul de postări inversat obiectului $home_shows
$home_shows->posts = $array_rev;
?>
<?php $captions = array(); ?>
<?php if ( $home_shows->have_posts() ) : ?>
<?php while ( $home_shows->have_posts() ) : $home_shows->the_post(); ?>
Mulțumesc pentru răspunsuri, mă bucur că am rezolvat această problemă.

Ce dezordine cu câmpurile personalizate? Tipul de postare personalizat? Este necesar, deoarece site-ul are câteva tipuri de postări personalizate pentru a organiza lucrurile. Voi încerca să explic mai bine prin editarea unei postări

Îmi cer scuze pentru alegerea greșită a cuvintelor. Câmpurile personalizate sunt disponibile și pentru tipurile de postări implicite. Doar pentru că este un tip de postare personalizat, tot ce ai nevoie este un 'post_type', pe care îl ai deja. Este adevărat că vrei să afișezi ultimele postări primele?

<?php
$args = array(
'post_type' => 'show', // tipul de postare personalizat
'posts_per_page' => 5, // număr de postări pe pagină
'order' => 'desc' // ordinea descrescătoare
);
$home_shows = new WP_Query($args);
// var_dump($home_shows); // pentru debugging
echo "<pre>";
print_r($home_shows->posts);
echo "</pre>";
$array_rev = array_reverse($home_shows->posts);
echo "<pre>";
print_r($array_rev);
echo "</pre>";
?>
Am încercat codul de mai sus pentru tipul meu de postare personalizat...
rezultatele ID-urilor postărilor: 240,239,238,237 pentru inversare: 237,238,239,240
Trebuie să fie altceva în neregulă la tine...

De ce inversezi array-ul? Doar schimbă ordinea în ASC și vei obține ultimele postări primele.

@RutwickGangurde Cred că nu ai înțeles cerința lui... ceea ce vrea el este să obțină ultimele 5 postări și apoi să le afișeze în ordine astfel încât cea mai veche postare din acele cinci să fie prima...

Dacă trebuie să reordonați interogarea principală, vă sugerez să utilizați următorul 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);
În acest exemplu, reordonez postările după data post_modified, dar puteți folosi o altă logică.
