Buclă WP_Query în interiorul unei bucle WP_Query
Î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!
Î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
}

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.

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 ;-)
