Bucle WP_Query dentro de otro bucle WP_Query

29 dic 2015, 15:50:55
Vistas: 20.9K
Votos: 2

Estoy tratando de usar un bucle WP_Query personalizado dentro de otro para mostrar datos del bucle interno independientemente del bucle principal. Encontré esta solución pero no entiendo realmente cómo usarla. Aquí está el código, funciona pero el bucle principal genera publicaciones duplicadas.

<?php
// definir la consulta principal
$main_args = array(
    'post_type' => 'page',
    'post_parent' => '10',
);
// ejecutar la consulta principal
$the_main_loop = new WP_Query($main_args);
// iniciar bucle principal
if($the_main_loop->have_posts()) : while($the_main_loop->have_posts()) : $the_main_loop->the_post(); 
?> 
    <p>Este es el contenido del bucle principal</p>

    <?php
    // definir la consulta interna
    $inner_args = array(
        'post_type' => 'page',
        'post_parent' => '20',
    );
    // ejecutar la consulta interna
    $the_inner_loop = new WP_Query($inner_args);
    // iniciar bucle interno
    if($the_inner_loop->have_posts()) : while($the_inner_loop->have_posts()) : $the_inner_loop->the_post(); 
    ?> 
        <p>Este es el contenido del bucle interno</p>
    <?php 
    // finalizar el bucle interno, sin reinicio
    endwhile; endif;
    ?> 

    <p>Este es otro contenido del bucle principal</p>

<?php 
// finalizar el bucle principal
endwhile; endif; wp_reset_postdata();
?>

¡Gracias!

5
Comentarios

Para obtener una buena respuesta, en realidad deberías hacer una pregunta. ¿Qué estás tratando de lograr que requeriría consultas anidadas?

jdm2112 jdm2112
29 dic 2015 17:18:17

¿Qué quieres decir con "usarlo"? Es código. Se escribe en un archivo. Pero no explicas qué quieres hacer.

s_ha_dum s_ha_dum
29 dic 2015 17:26:48

Vale, disculpa por la mala pregunta, estoy intentando obtener datos del bucle interno independientemente del bucle principal.

jjj jjj
29 dic 2015 17:27:59

Tu edición aún no dice nada. ¿El código no funciona, tienes problemas con el código, estás recibiendo errores, cuáles son esos errores?

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

Pregunta recién editada, disculpa por la sensación de pereza.

jjj jjj
29 dic 2015 19:01:30
Todas las respuestas a la pregunta 1
2

Todavía no está claro lo que realmente quieres hacer, pero según esto:

funciona pero el bucle principal genera posts duplicados

Puedo decirte que es el resultado esperado.

Tu bucle "principal" consulta y muestra todas las páginas que tienen un ID de página padre igual a 10. Digamos que hay 10 páginas que coinciden con tu consulta "principal", esto significa que tu bucle pasará por 10 ciclos si quieres llamarlo así. Piensa en el bucle como un bucle foreach ya que esencialmente es eso (pero no exactamente lo mismo).

Ahora, dentro de cada ciclo, estás agregando otra consulta que busca páginas con un ID padre de 20. Digamos que también hay 10. Entonces, cada ciclo del bucle "principal" mostrará 10 posts con padre 20, 10 veces porque hay 10 páginas con padre 10.

Muy básicamente, tienes:

// Primer ciclo 
the_post(); // 1ra página con padre 10
    // consulta personalizada que mostrará páginas con padre 20
// Fin del primer ciclo e inicio del segundo ciclo
the_post();  // 2da página con padre 10
    // consulta personalizada que mostrará páginas con padre 20
// Fin del segundo ciclo e inicio del tercer ciclo
the_post();  // 3ra página con padre 10
    // consulta personalizada que mostrará páginas con padre 20
etc etc

Deberías sacar tu segunda consulta fuera de la "principal" para separarlas

$main_args = [
    'post_type' => 'page',
    'post_parent' => '10',
];
// ejecutar la consulta principal
$the_main_loop = new WP_Query($main_args);
// iniciar consulta principal
if($the_main_loop->have_posts()) { 
    while($the_main_loop->have_posts()) { 
    $the_main_loop->the_post(); 

        // Mostrar el contenido de tu bucle

    } // endwhile
    wp_reset_postdata(); // MUY MUY IMPORTANTE
}

// definir la consulta interna
$inner_args = [
    'post_type' => 'page',
    'post_parent' => '20',
];
// ejecutar la consulta interna
$the_inner_loop = new WP_Query($inner_args);
// iniciar consulta interna
if($the_inner_loop->have_posts()) {
    while($the_inner_loop->have_posts()) {
    $the_inner_loop->the_post();

        // Mostrar el contenido de tu bucle

    } // endwhile
    wp_reset_postdata(); // MUY MUY IMPORTANTE
}
29 dic 2015 19:30:48
Comentarios

Gracias por tu explicación y por tu tiempo, me ayudó mucho a entender los ciclos de un bucle. Mi problema es más sobre cómo poner consultas de un bucle dentro de otro, pero me doy cuenta de que mi ejemplo y mi pregunta no son claros, lo siento mucho (de nuevo) por eso. Me aseguraré de hacerlo mejor la próxima vez en StackExchange.

jjj jjj
29 dic 2015 19:44:37

Un placer. Deberías intentar obtener un caso de uso exacto para respuestas exactas. He hecho una publicación o dos sobre usar una consulta dentro de otra, algo como publicaciones relacionadas si mal no recuerdo, pero francamente, no sé cuándo y dónde. Siéntete libre de revisar mis respuestas ;-)

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