Come invertire l'ordine dei post DOPO l'esecuzione della query in WordPress
Sto visualizzando gli ultimi 5 post di un custom post type chiamato 'show'.
Attualmente ottengo il post più recente per primo.
<?php
$args = array(
'post_type' => 'show',
'posts_per_page' => 5,
'order' => 'DESC'
);
$home_shows = new WP_Query($args);
var_dump($home_shows);
?>
Quello che mi serve è avere il più vecchio (nell'array degli ultimi show) per primo, e l'ultimo show (in quell'array di show recenti) per ultimo.
Attualmente ottengo (la data dello show tramite un custom field meta value):
3/11/12, 3/7/12, 3/4/12, 3/2/12, 2/30/12 ecc.
Mi serve: 2/30/12, 3/1/12, 3/4/12, 3/7/12, 3/11/12,
Ho provato a usare array_reverse di php così (aggiunto al codice sopra):
$reversed_shows = array_reverse( $home_shows->posts );
Il che mi ha dato risultati strani (visualizzava parti completamente diverse del post, l'ordine dell'array era sbagliato).
Qualche idea?
Ho capito cosa stavo sbagliando. Un semplice errore da principiante.
Array_reverse funzionava correttamente, ma poi non stavo riassegnando l'array invertito nuovamente alla WP_Query $home_shows, quindi non vedevo alcun cambiamento.
Ecco la soluzione e il mio codice rivisto.
<?php
$args = array(
'post_type' => 'show',
'posts_per_page' => 5,
'order' => 'DESC',
);
$home_shows = new WP_Query($args);
//inverti l'ordine dei post, ultimi per ultimi
$array_rev = array_reverse($home_shows->posts);
//riassegna l'array di post invertiti all'oggetto $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(); ?>
Grazie per le risposte, sono contento di aver risolto questo problema.

Quale casino di campi personalizzati? Il custom post type? È necessario, perché il sito ha alcuni custom post type per organizzare le cose. Proverò a spiegare meglio cosa intendo tramite una modifica del post

Mi scuso per la scelta sbagliata delle parole. I campi personalizzati sono disponibili anche per i post type di default. Solo perché è un custom post type, tutto ciò di cui hai bisogno è un 'post_type', che già hai. È vero che vuoi visualizzare per primi gli ultimi post?

<?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>";
?>
Ho provato quanto sopra per il mio custom post type...
risultati ID dei post: 240,239,238,237 per l'inversione: 237,238,239,240
Deve esserci qualcos'altro di problematico dal tuo lato......

Perché invertire l'array? Basta cambiare l'ordine in ASC e otterrai gli ultimi post per primi.

@RutwickGangurde Penso che tu non abbia capito la sua richiesta... quello che vuole è ottenere gli ultimi 5 post e poi visualizzarli in ordine in modo che tra quegli ultimi cinque il post con la data più piccola sia il primo.....

Se hai bisogno di riordinare la query principale, ti consiglio di utilizzare il seguente 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 questo esempio sto riordinando i post per data di modifica (post_modified), ma puoi utilizzare un'altra logica se necessario.
