WP_Query per ottenere i primi due post più recenti, poi un altro loop per i successivi tre

3 feb 2016, 00:38:33
Visualizzazioni: 36.7K
Voti: 5

Il mio obiettivo finale è elencare gli ultimi 5 post, indipendentemente dalla categoria.

Vorrei prima creare una WP_Query per ottenere gli ultimi due post e inserirli in una specifica struttura HTML.

Poi vorrei creare un'altra WP_Query per ottenere i successivi tre post e inserirli in una struttura HTML differente.

Ho provato alcuni frammenti di codice e quello che succede è che ogni WP_Query inizia dall'ultimo post in entrambe le strutture HTML. C'è un argomento che posso utilizzare per dire specificamente alla seconda query di saltare i primi due post?

2
Commenti

Inoltre, secondo me puoi farlo con una singola query.

Laxmana Laxmana
3 feb 2016 00:42:28
Tutte le risposte alla domanda 2
5

Esegui una wp_query per post_per_page = 2 e ottieni gli ID di questi 2 post in un array per escluderli nei successivi 3 post necessari

<?php

    // La Query
    $next_args = array(
                    'post_type' => '<your_post_type>',
                    'post_status' => 'publish',
                    'posts_per_page'=>2,
                    'order'=>'DESC',
                    'orderby'=>'ID',
                    );

    $the_query = new WP_Query( $args );

    // Il Loop
    if ( $the_query->have_posts() ) {
        $not_in_next_three = array();
        while ( $the_query->have_posts() ) {
            $the_query->the_post();
            //qui il tuo html per gli ultimi 2
            $not_in_next_three[] = get_the_ID();
        }

    } else {
        // nessun post trovato
    }
    /* Ripristina i dati originali del Post */
    wp_reset_postdata();

Ora l'array creato sopra verrà escluso nella wp_query che recupera i successivi 3 post

// La Query
$next_args = array(
                'post_type' => '<your_post_type>',
                'post_status' => 'publish',
                'posts_per_page'=>3,
                'order'=>'DESC',
                'orderby'=>'ID',
                'post__not_in'=>$not_in_next_three
                );
$next_the_query = new WP_Query( $next_args );

// Il Loop
if ( $next_the_query->have_posts() ) {
    while ( $next_the_query->have_posts() ) {
        $next_the_query->the_post();
        //qui il tuo html per i successivi 3

    }

} else {
    // nessun post trovato
}
/* Ripristina i dati originali del Post */
wp_reset_postdata();

?>
3 feb 2016 12:17:10
Commenti

Aggiungi qualche spiegazione al tuo codice e al metodo che stai utilizzando. Questo può chiaramente essere fatto con una singola query, non 2

Pieter Goosen Pieter Goosen
3 feb 2016 12:18:54

Sì, può essere fatto con una query.. ma il proprietario della domanda ha chiesto 2 wp_query.. ecco perché...

Prakash Rao Prakash Rao
3 feb 2016 12:19:59

controlla la risposta modificata ora @peiter Goosen

Prakash Rao Prakash Rao
3 feb 2016 12:23:05

Ho risolto questo problema eseguendo due WP_Query sulla stessa pagina e utilizzando un parametro offset nel secondo set di argomenti.

Vorrei sapere come utilizzare una singola query e ottenere lo stesso risultato.

C. Ruben C. Ruben
11 feb 2016 00:59:43

Può essere fatto con una singola wp_query incrementando un contatore e modificando la struttura HTML in base al contatore.

Prakash Rao Prakash Rao
11 feb 2016 14:56:37
0

Puoi utilizzare i parametri di paginazione di WP_Query.

Tuttavia, utilizzare due query per raggiungere questo obiettivo è inefficiente. Una soluzione migliore è utilizzare una singola query e modificare il markup in base al valore della proprietà $current_post di WP_Query, che (quando utilizzata nel loop) riflette l'indice del post attualmente in elaborazione all'interno della pagina corrente dei risultati.

3 feb 2016 00:45:59