WP_Query pentru primele două postări recente, apoi o altă buclă pentru următoarele trei

3 feb. 2016, 00:38:33
Vizualizări: 36.7K
Voturi: 5

Scopul meu final este să listez ultimele 5 postări, indiferent de categorie.

Mai întâi, aș dori să creez un WP_Query pentru a obține ultimele două postări și să le inserez într-o structură HTML specifică.

Apoi, aș dori să creez un alt WP_Query pentru a obține următoarele trei postări și să le inserez într-o structură HTML diferită.

Am încercat câteva fragmente de cod și ceea ce se întâmplă este că fiecare WP_Query începe de la ultima postare în ambele structuri HTML. Există vreun argument pe care îl pot folosi pentru a specifica celei de-a doua interogări să sară peste primele două postări?

2
Comentarii

De asemenea, în opinia mea poți face asta cu un singur query.

Laxmana Laxmana
3 feb. 2016 00:42:28
Toate răspunsurile la întrebare 2
5

Execută un wp_query pentru post_per_page = 2 și obține ID-urile acestor 2 postări într-un array pentru a fi excluse în următoarele 3 postări necesare

<?php

    // Interogarea
    $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 );

    // Bucla
    if ( $the_query->have_posts() ) {
        $not_in_next_three = array();
        while ( $the_query->have_posts() ) {
            $the_query->the_post();
            //aici html-ul tău pentru ultimele 2
            $not_in_next_three[] = get_the_ID();
        }

    } else {
        // nicio postare găsită
    }
    /* Restaurare date Post originale */
    wp_reset_postdata();

Acum array-ul creat mai sus va fi exclus în wp_query care preia următoarele 3 postări

// Interogarea
$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 );

// Bucla
if ( $next_the_query->have_posts() ) {
    while ( $next_the_query->have_posts() ) {
        $next_the_query->the_post();
        //aici html-ul tău pentru următoarele 3

    }

} else {
    // nicio postare găsită
}
/* Restaurare date Post originale */
wp_reset_postdata();

?>
3 feb. 2016 12:17:10
Comentarii

Adaugă o explicație la codul și metoda pe care le folosești. Acest lucru poate fi realizat clar într-un singur query, nu 2

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

Da, poate fi realizat într-un singur query.. dar proprietarul întrebării a cerut 2 wp_query.. de aceea...

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

verifică răspunsul editat acum @peiter Goosen

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

Am rezolvat această problemă efectuând două interogări WP_Query pe aceeași pagină și folosind un parametru de offset în cel de-al doilea set de argumente.

Aș dori să știu cum să folosesc o singură interogare și să obțin același rezultat.

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

Se poate realiza cu o singură interogare wp_query prin creșterea unui contor și modificarea structurii HTML pe baza acestuia.

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

Puteți utiliza parametrii de paginare ai WP_Query.

Cu toate acestea, utilizarea a două interogări pentru a realiza acest obiectiv este ineficientă. O soluție mai bună este să folosiți o singură interogare și să modificați marcajul în funcție de valoarea proprietății $current_post din WP_Query, care (când este utilizată în buclă) reflectă indexul postării în curs de procesare în cadrul paginii curente de rezultate.

3 feb. 2016 00:45:59