Loop WP_Query all'interno di un loop WP_Query
Sto cercando di utilizzare un loop WP_Query personalizzato all'interno di un altro per visualizzare i dati del loop interno indipendentemente dal loop principale. Ho trovato questa soluzione ma non capisco bene come utilizzarla. Ecco il codice, funziona ma il loop principale genera post duplicati.
<?php
// definisce la query principale
$main_args = array(
'post_type' => 'page',
'post_parent' => '10',
);
// esegue la query principale
$the_main_loop = new WP_Query($main_args);
// avvia query principale
if($the_main_loop->have_posts()) : while($the_main_loop->have_posts()) : $the_main_loop->the_post();
?>
<p>Questo è il contenuto del loop principale</p>
<?php
// definisce la query interna
$inner_args = array(
'post_type' => 'page',
'post_parent' => '20',
);
// esegue la query interna
$the_inner_loop = new WP_Query($inner_args);
// avvia query interna
if($the_inner_loop->have_posts()) : while($the_inner_loop->have_posts()) : $the_inner_loop->the_post();
?>
<p>Questo è il contenuto del loop interno</p>
<?php
// termina il loop interno, nessun reset
endwhile; endif;
?>
<p>Questo è un altro contenuto del loop principale</p>
<?php
// termina il loop principale
endwhile; endif; wp_reset_postdata();
?>
Grazie!
Non è ancora del tutto chiaro cosa tu voglia fare effettivamente, ma secondo questo:
funziona ma il loop principale genera post duplicati
Posso dirti che è un output previsto.
Il tuo loop "principale" interroga e mostra tutte le pagine che hanno un genitore con ID 10
. Supponiamo ci siano 10 pagine che corrispondono alla tua query "principale", questo significa che il tuo loop attraverserà 10 cicli se vuoi chiamarli così. Pensa al loop come a un ciclo foreach
perché essenzialmente è quello (ma non esattamente lo stesso).
Ora, all'interno di ogni singolo ciclo, stai aggiungendo un'altra query che interroga le pagine con un genitore ID 20
. Supponiamo ce ne siano 10. Quindi ogni ciclo del loop "principale" mostrerà 10 post con genitore 20
, per 10 volte perché ci sono 10 pagine con genitore 10
.
Molto semplicemente, hai:
// Primo ciclo
the_post(); // 1a pagina con genitore 10
// query personalizzata che mostrerà pagine con genitore 20
// Fine primo ciclo e inizio secondo ciclo
the_post(); // 2a pagina con genitore 10
// query personalizzata che mostrerà pagine con genitore 20
// Fine secondo ciclo e inizio terzo ciclo
the_post(); // 3a pagina con genitore 10
// query personalizzata che mostrerà pagine con genitore 20
ecc ecc
Dovresti portare la tua seconda query fuori da quella "principale" per separarle
$main_args = [
'post_type' => 'page',
'post_parent' => '10',
];
// esegui la query principale
$the_main_loop = new WP_Query($main_args);
// avvia la query principale
if($the_main_loop->have_posts()) {
while($the_main_loop->have_posts()) {
$the_main_loop->the_post();
// Mostra il contenuto del tuo loop
} // endwhile
wp_reset_postdata(); // MOLTO MOLTO IMPORTANTE
}
// definisci la query interna
$inner_args = [
'post_type' => 'page',
'post_parent' => '20',
];
// esegui la query interna
$the_inner_loop = new WP_Query($inner_args);
// avvia la query interna
if($the_inner_loop->have_posts()) {
while($the_inner_loop->have_posts()) {
$the_inner_loop->the_post();
// Mostra il contenuto del tuo loop
} // endwhile
wp_reset_postdata(); // MOLTO MOLTO IMPORTANTE
}

Grazie per la tua spiegazione e per il tuo tempo, mi ha aiutato molto a capire i cicli di un loop. Il mio problema è più relativo al mettere delle query di loop all'interno di un altro, ma mi rendo conto che il mio esempio e la mia domanda non sono chiari, mi dispiace molto (di nuovo) per questo. Farò attenzione a farlo meglio, la prossima volta su StackExchange.

È stato un piacere. Dovresti cercare di ottenere un caso d'uso preciso per risposte esatte. Ho fatto un post o due sull'uso di una query all'interno di un'altra, qualcosa come post correlati se ricordo bene, ma francamente non so quando e dove. Sentiti libero di guardare tra le mie risposte ;-)
