Come invertire l'ordine dei post DOPO l'esecuzione della query in WordPress

3 apr 2012, 06:59:14
Visualizzazioni: 13.7K
Voti: 6

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?

0
Tutte le risposte alla domanda 4
1

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.

3 apr 2012 17:07:22
Commenti

Non dimenticare di contrassegnare la tua risposta come accettata!

Burgi Burgi
21 nov 2016 13:39:16
3

Elimina tutto il disordine dei campi personalizzati e aggiungi un 'order' => 'ASC' all'array args! E il gioco è fatto!

3 apr 2012 07:04:22
Commenti

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

Squadrons Squadrons
3 apr 2012 07:18:22

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?

Rutwick Gangurde Rutwick Gangurde
3 apr 2012 07:27:40

questo in realtà non risolve il problema perché se stai interrogando solo i 10 post più recenti, e usi order ASC ti darà i 10 post più vecchi.

Jacob Raccuia Jacob Raccuia
27 lug 2016 02:42:36
5
    <?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......

3 apr 2012 09:28:58
Commenti

Orderby è impostato su date per impostazione predefinita!

Rutwick Gangurde Rutwick Gangurde
3 apr 2012 09:33:30

@RutwickGangurde ho modificato la mia risposta...

Rajeev Vyas Rajeev Vyas
3 apr 2012 09:52:35

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

Rutwick Gangurde Rutwick Gangurde
3 apr 2012 09:58:31

@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.....

Rajeev Vyas Rajeev Vyas
3 apr 2012 10:03:56

Va bene, non l'avevo notato prima. Ho appena letto la sua domanda modificata!

Rutwick Gangurde Rutwick Gangurde
3 apr 2012 10:15:04
0

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.

31 gen 2024 04:58:43