Múltiples bucles en la misma página, sin contenido duplicado

11 nov 2012, 16:13:45
Vistas: 26.1K
Votos: 0

Estoy intentando crear una página con múltiples bucles, necesito que cada bucle muestre un número predefinido de entradas de la misma categoría (cada bucle muestra X número de entradas de la Categoría CATS). Pero también necesito que el segundo bucle, el tercer bucle y así sucesivamente muestren las entradas desde donde se detuvo el último bucle, sin duplicar contenido (ejemplo: bucle 1 desde la entrada 1 a 5, bucle 2 desde la entrada 6 a 10, bucle 3 desde la entrada 11 a 15, etc.). Esto es lo que he intentado hasta ahora (También probé el código en el codex de WordPress, pero nada parece funcionar)

¿Pueden ayudarme?

Este es mi código hasta ahora:

<?php   if (have_posts()) : ?>
<?php   $mosaics = new WP_Query('category_name=mosaics&posts_per_page=5'); ?>
<?php   while ($mosaics->have_posts()) : $mosaics->the_post(); ?>
<?php   if( $post->ID == $do_not_duplicate ) continue; ?>

<?php   echo get_the_content(); ?>
<?php   endwhile; ?>
<?php   endif; ?>
<?php   wp_reset_query(); ?>

<br />

<?php   if (have_posts()) : ?>
<?php   $mosaics = new WP_Query('category_name=mosaics&posts_per_page=4'); ?>
<?php   while ($mosaics->have_posts()) : $mosaics->the_post(); ?>
<?php   if( $post->ID == $do_not_duplicate ) continue; ?>

<?php   echo get_the_content(); ?>
<?php   endwhile; ?>
<?php   endif; ?>
<?php   wp_reset_query(); ?>

<br />

<?php   if (have_posts()) : ?>
<?php   $mosaics = new WP_Query('category_name=mosaics&posts_per_page=3'); ?>
<?php   while ($mosaics->have_posts()) : $mosaics->the_post(); ?>
<?php   if( $post->ID == $do_not_duplicate ) continue; ?>

<?php   echo get_the_content(); ?>
<?php   endwhile; ?>
<?php   endif; ?>
<?php   wp_reset_query(); ?>

<br />

<?php   if (have_posts()) : ?>
<?php   $mosaics = new WP_Query('category_name=mosaics&posts_per_page=2'); ?>
<?php   while ($mosaics->have_posts()) : $mosaics->the_post(); ?>
<?php   if( $post->ID == $do_not_duplicate ) continue; ?>

<?php   echo get_the_content(); ?>
<?php   endwhile; ?>
<?php   endif; ?>
<?php   wp_reset_query(); ?>
2
Comentarios

'probé el código en el codex de wordpress' - ¿te refieres a: http://codex.wordpress.org/The_Loop#Multiple_Loops_in_Action

Michael Michael
11 nov 2012 16:32:09

@Michael: sí, probé eso y otras cosas pero nada parece funcionar

Martin Aston Martin Aston
11 nov 2012 16:45:19
Todas las respuestas a la pregunta 5
0

Es importante leer este capítulo del Codex completo hasta el final, ya que las sugerencias esenciales están después del encabezado 'Nota para Múltiples Publicaciones en la Primera Categoría';

código repetitivo y tedioso:

<?php   $do_not_duplicate = array(); ?>
<?php   $mosaics = new WP_Query('category_name=mosaics&posts_per_page=5'); ?>
<?php   while ($mosaics->have_posts()) : $mosaics->the_post(); ?>
<?php   $do_not_duplicate[] = $post->ID; ?>

<?php   echo get_the_content(); ?>
<?php   endwhile; wp_reset_postdata(); ?>

<br />

<?php   $mosaics = new WP_Query( array( 'category_name' => 'mosaics', 'posts_per_page' => 4, 'post__not_in' => $do_not_duplicate ) ); ?>
<?php   while ($mosaics->have_posts()) : $mosaics->the_post(); ?>
<?php   $do_not_duplicate[] = $post->ID; ?>
<?php   echo get_the_content(); ?>
<?php   endwhile; wp_reset_postdata(); ?>

<br />

<?php   $mosaics = new WP_Query( array( 'category_name' => 'mosaics', 'posts_per_page' => 3, 'post__not_in' => $do_not_duplicate ) ); ?>
<?php   while ($mosaics->have_posts()) : $mosaics->the_post(); ?>
<?php   $do_not_duplicate[] = $post->ID; ?>
<?php   echo get_the_content(); ?>
<?php   endwhile; wp_reset_postdata(); ?>

<br />

<?php   $mosaics = new WP_Query( array( 'category_name' => 'mosaics', 'posts_per_page' => 2, 'post__not_in' => $do_not_duplicate ) ); ?>
<?php   while ($mosaics->have_posts()) : $mosaics->the_post(); ?>
<?php   $do_not_duplicate[] = $post->ID; ?>
<?php   echo get_the_content(); ?>
<?php   endwhile; wp_reset_postdata(); ?>
11 nov 2012 17:08:54
1

Si bien la respuesta de Michael funciona, realizar múltiples consultas para esto es un desperdicio de recursos de la base de datos cuando puedes obtener todos los resultados en una sola consulta y manejar la división de la salida en PHP. Revisa esta respuesta que di en otra pregunta similar para lograr los mismos resultados con una sola consulta a la base de datos.

11 nov 2012 19:15:45
Comentarios

Estoy totalmente de acuerdo; sin embargo, espero que mi respuesta sea útil como un esquema general sobre cómo evitar publicaciones duplicadas con una multitud de bucles.

Michael Michael
11 nov 2012 20:25:46
1

Puedes usar wp_reset_query() después de cada consulta para limpiar los resultados de las consultas anteriores, o crear instancias de WP_Query donde los bucles se iterarían a través de variables locales en lugar de las globales.

11 nov 2012 16:23:19
Comentarios

No, eso solo no evitaría publicaciones duplicadas, porque una publicación puede tener múltiples categorías.

fuxia fuxia
11 nov 2012 16:25:04
0

Utiliza el parámetro Offset para los bucles posteriores, esto comenzará a mostrar publicaciones después del número que especifiques:

// comienza desde la publicación 6 hasta la 10
$mosaics = new WP_Query('category_name=mosaics&posts_per_page=5&offset=5');

// comienza desde la publicación 11 hasta la 15
$mosaics = new WP_Query('category_name=mosaics&posts_per_page=5&offset=10');
11 nov 2012 17:04:20
0

La magia.

 wp_reset_query();

Esto podría usarse para limpiar el camino para futuras llamadas a WP_Query. O para evitar la duplicación debido a una llamada no estructurada al loop, como:

$data = query_posts($args);
6 oct 2016 23:58:06