Loop WP_Query all'interno di un loop WP_Query

29 dic 2015, 15:50:55
Visualizzazioni: 20.9K
Voti: 2

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!

5
Commenti

Per ottenere una buona risposta dovresti effettivamente fare una domanda. Cosa stai cercando di ottenere che richiederebbe query nidificate?

jdm2112 jdm2112
29 dic 2015 17:18:17

Cosa intendi con "usarlo"? È codice. Viene scritto in un file. Ma non spieghi cosa vuoi fare.

s_ha_dum s_ha_dum
29 dic 2015 17:26:48

ok, scusa per la domanda mal posta, sto cercando di ottenere dati dal loop interno indipendentemente dal loop principale.

jjj jjj
29 dic 2015 17:27:59

La tua modifica non dice ancora nulla. Il codice non funziona? Hai problemi con il codice? Stai ricevendo errori? Quali sono questi errori?

Pieter Goosen Pieter Goosen
29 dic 2015 18:09:19

Domanda appena modificata, scusa per la sensazione di pigrizia.

jjj jjj
29 dic 2015 19:01:30
Tutte le risposte alla domanda 1
2

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
}
29 dic 2015 19:30:48
Commenti

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.

jjj jjj
29 dic 2015 19:44:37

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

Pieter Goosen Pieter Goosen
29 dic 2015 19:50:31