Buclă WP_Query în interiorul unei bucle WP_Query

29 dec. 2015, 15:50:55
Vizualizări: 20.9K
Voturi: 2

Încerc să folosesc o buclă personalizată WP_Query în interiorul alteia pentru a afișa date din bucla interioară independent de bucla principală. Am găsit această soluție dar nu înțeleg exact cum să o folosesc. Iată codul, funcționează dar bucla principală generează postări duplicate.

<?php
// definește interogarea principală
$main_args = array(
    'post_type' => 'page',
    'post_parent' => '10',
);
// execută interogarea principală
$the_main_loop = new WP_Query($main_args);
// pornește interogarea principală
if($the_main_loop->have_posts()) : while($the_main_loop->have_posts()) : $the_main_loop->the_post(); 
?> 
    <p>Acesta este conținutul din bucla principală</p>

    <?php
    // definește interogarea interioară
    $inner_args = array(
        'post_type' => 'page',
        'post_parent' => '20',
    );
    // execută interogarea interioară
    $the_inner_loop = new WP_Query($inner_args);
    // pornește interogarea interioară
    if($the_inner_loop->have_posts()) : while($the_inner_loop->have_posts()) : $the_inner_loop->the_post(); 
    ?> 
        <p>Acesta este conținutul din bucla interioară</p>
    <?php 
    // încheie bucla interioară, fără resetare
    endwhile; endif;
    ?> 

    <p>Acesta este alt conținut din bucla principală</p>

<?php 
// încheie bucla principală
endwhile; endif; wp_reset_postdata();
?>

Mulțumesc!

5
Comentarii

Pentru a obține un răspuns bun, ar trebui să pui o întrebare concretă. Ce încerci să realizezi și care ar fi necesitatea de a imbrica interogări?

jdm2112 jdm2112
29 dec. 2015 17:18:17

Ce înțelegi prin "a-l folosi"? Este cod. Se scrie într-un fișier. Dar nu explici ce anume vrei să faci.

s_ha_dum s_ha_dum
29 dec. 2015 17:26:48

ok, îmi cer scuze pentru întrebarea neclară, încerc să obțin date din bucla interioară independent de bucla principală.

jjj jjj
29 dec. 2015 17:27:59

Ediția ta încă nu spune nimic. Codul nu funcționează, ai probleme cu codul, primești erori, care sunt acele erori?

Pieter Goosen Pieter Goosen
29 dec. 2015 18:09:19

Întrebarea a fost acum editată, îmi cer scuze pentru senzația de lene.

jjj jjj
29 dec. 2015 19:01:30
Toate răspunsurile la întrebare 1
2

Încă nu este deloc clar ce anume doriți să faceți, dar conform acestui lucru:

funcționează, dar bucla principală generează postări duplicate

Pot să vă spun că acesta este rezultatul așteptat.

Bucla dvs. "principală" interoghează și afișează toate paginile care au o pagină părinte cu ID-ul 10. Să presupunem că există 10 pagini care se potrivesc interogării dvs. "principale", ceea ce înseamnă că bucla dvs. va parcurge 10 cicluri, dacă vreți să o numiți astfel. Gândiți-vă la buclă ca la o buclă foreach, deoarece este în esență același lucru (dar nu exact la fel).

Acum, în fiecare ciclu, adăugați o altă interogare care interoghează paginile cu un ID părinte de 20. Să presupunem că sunt tot 10. Deci, fiecare ciclu al buclei "principale" va afișa 10 postări cu părintele 20, de 10 ori, deoarece există 10 pagini cu un părinte de 10.

Foarte simplu, aveți:

// Primul ciclu 
the_post(); // prima pagină cu părintele 10
    // interogare personalizată care va afișa pagini din părintele 20
// Sfârșitul primului ciclu și începutul celui de-al doilea ciclu
the_post();  // a doua pagină cu părintele 10
    // interogare personalizată care va afișa pagini din părintele 20
// Sfârșitul celui de-al doilea ciclu și începutul celui de-al treilea ciclu
the_post();  // a treia pagină cu părintele 10
    // interogare personalizată care va afișa pagini din părintele 20
etc etc

Ar trebui să mutați a doua interogare în afara celei "principale" pentru a le separa

$main_args = [
    'post_type' => 'page',
    'post_parent' => '10',
];
// execută interogarea principală
$the_main_loop = new WP_Query($main_args);
// porniți interogarea principală
if($the_main_loop->have_posts()) { 
    while($the_main_loop->have_posts()) { 
    $the_main_loop->the_post(); 

        // Afișați conținutul buclei

    } // endwhile
    wp_reset_postdata(); // FOARTE FOARTE IMPORTANT
}

// definiți interogarea interioară
$inner_args = [
    'post_type' => 'page',
    'post_parent' => '20',
];
// execută interogarea interioară
$the_inner_loop = new WP_Query($inner_args);
// porniți interogarea interioară
if($the_inner_loop->have_posts()) {
    while($the_inner_loop->have_posts()) {
    $the_inner_loop->the_post();

        // Afișați conținutul buclei

    } // endwhile
    wp_reset_postdata(); // FOARTE FOARTE IMPORTANT
}
29 dec. 2015 19:30:48
Comentarii

Mulțumesc pentru explicație și pentru timpul acordat, m-a ajutat foarte mult să înțeleg ciclurile unei bucle. Problema mea este mai degrabă legată de introducerea unor interogări în buclă în interiorul alteia, dar realizez că exemplul meu și întrebarea mea nu sunt clare, îmi cer scuze (din nou) pentru asta. Voi avea grijă să o fac mai bine, data viitoare pe StackExchange.

jjj jjj
29 dec. 2015 19:44:37

Cu plăcere. Ar trebui să încerci să obții un caz de utilizare exact pentru răspunsuri exacte. Am făcut un post sau două despre utilizarea unei interogări în alta, ceva de genul postări înrudite dacă îmi amintesc corect, dar sincer, nu știu când și unde. Simte-te liber să parcurgi răspunsurile mele ;-)

Pieter Goosen Pieter Goosen
29 dec. 2015 19:50:31