Trusted WordPress tutorials, when you need them most.
Beginner’s Guide to WordPress
Copa WPB
25 Million+
Websites using our plugins
16+
Years of WordPress experience
3000+
WordPress tutorials
by experts

Cómo evitar la visualización de entradas duplicadas con varios bucles en WordPress

Nota editorial: Ganamos una comisión de los enlaces de socios en WPBeginner. Las comisiones no afectan a las opiniones o evaluaciones de nuestros editores. Más información sobre Proceso editorial.

¿Está intentando corregir la visualización de entradas duplicadas con varios bucles en WordPress?

Si utiliza varias consultas de WordPress para mostrar diferentes entradas, es posible que encuentre contenido duplicado. Esto se debe a que algunas entradas pueden coincidir con más de un bucle y aparecer dos veces.

En este artículo, le mostraremos cómo evitar fácilmente la visualización de entradas duplicadas con múltiples bucles en WordPress.

Avoding duplicate posts when working with multiple WordPress loops

Cómo aparecen entradas duplicadas en varios bucles de WordPress

Al crear un tema de WordPress personalizado o una plantilla de página personalizada, es posible que a veces necesite utilizar varios bucles de WordPress.

Por ejemplo, puede mostrar sus entradas recientes junto a las más populares de su sitio. También puede ayudar a los lectores a encontrar contenidos interesantes mostrando todas las entradas de cada categoría.

En todos estos ejemplos, una sola entrada puede coincidir con los criterios de varios bucles. Cuando esto ocurre, WordPress mostrará contenido duplicado.

Este contenido duplicado puede hacer que su sitio parezca desordenado y poco profesional. Además, ocupa espacio en pantalla sin aportar ningún valor añadido.

Dado que genera entradas dinámicamente para cada bucle, no puede predecir manualmente si una entrada duplicada aparecerá en varios bucles.

Dicho esto, veamos una forma sencilla de evitar entradas duplicadas cuando se trata de bucles múltiples en WordPress.

Evitar entradas duplicadas en múltiples bucles de WordPress

En esta guía, le mostraremos algunos ejemplos de código de WordPress que provocan el error de entradas duplicadas y, a continuación, compartiremos un fragmento de código que corrige el problema.

Al crear un tema hijo de WordPress o una plantilla personalizada, su código puede ser completamente diferente. Sin embargo, puede utilizar nuestro fragmento de código como punto de partida y luego modificarlo para adaptarlo a su propio sitio web.

En primer lugar, vamos a crear un problema / conflicto / incidencia de entradas duplicadas. En el siguiente código de ejemplo, mostramos todas las entradas de la categoría “viajes” y todas las entradas de la categoría “noticias” sin evitar entradas duplicadas.

/******  The First Query *******/
 
$first_query = new WP_Query(  array (
'category_name' => 'news',
'posts_per_page'  =>  3 
));
  
// The Loop
if ( $first_query->have_posts() ) {
    echo '<ul>';
    while ( $first_query->have_posts() ) {
        $first_query->the_post();
 
//display posts
echo '<li>';
echo the_post_thumbnail( array(50, 50) );
echo get_the_title(); 
echo '</li>';
    }
    echo '</ul>';
} else {
    // no posts found
}
/* Restore original Post Data */
wp_reset_postdata();
 
 
/******  The Second Query *******/
$second_query = new WP_Query(  array (
'category_name' => 'travel',
'posts_per_page'  =>  3
 
) );
 
// The Loop
if ( $second_query->have_posts() ) {
 
echo '<ul>';
while ( $second_query->have_posts() ) {
 
$second_query->the_post();
echo '<li>'; 
echo the_post_thumbnail( array(50, 50) );
echo get_the_title(); 
echo '</li>';
    }
echo '</ul>';
} else {
    // no posts found
}
/* Restore original Post Data */
wp_reset_postdata();
?>

Como puede ver, este código no comprueba si hay entradas duplicadas en ninguna de las dos consultas.

Si una entrada pertenece tanto a la categoría “noticias” como a la de “viajes”, aparecerá dos veces, como puede ver en la siguiente imagen.

How to avoid duplicate post display with multiple loops in WordPress

Vamos a corregir este problema.

Para evitar entradas duplicadas en su blog de WordPress, necesitará almacenar temporalmente los datos acerca de todas las entradas mostradas en el primer bucle.

Una vez que tenga esa información, puede modificar la segunda consulta para evitar que aparezcan entradas duplicadas en el segundo bucle:

/******  The First Query *******/
 
$first_query = new WP_Query(  array (
'category_name' => 'news',
'posts_per_page'  =>  3
) );
  
// The Loop
if ( $first_query->have_posts() ) {
    echo '<ul>';
    while ( $first_query->have_posts() ) {
        $first_query->the_post();
         
// Store Post IDs in an Array to reuse later
$exclude[] = $post->ID; 
 
//display posts
echo '<li>';
echo the_post_thumbnail( array(50, 50) );
echo get_the_title(); 
echo '</li>';
    }
    echo '</ul>';
} else {
    // no posts found
}
/* Restore original Post Data */
wp_reset_postdata();
 
 
/******  The Second Query *******/
$second_query = new WP_Query(  array (
'category_name' => 'travel',
'post__not_in'  =>  $exclude, // Tell WordPress to Exclude these posts
'posts_per_page'  =>  3
 
) );
 
// The Loop
if ( $second_query->have_posts() ) {
 
echo '<ul>';
while ( $second_query->have_posts() ) {
 
$second_query->the_post();
echo '<li>'; 
echo the_post_thumbnail( array(50, 50) );
echo get_the_title(); 
echo '</li>';
    }
echo '</ul>';
} else {
    // no posts found
}
/* Restore original Post Data */
wp_reset_postdata();
?>

En el código anterior, estamos almacenando IDs de entradas en un array llamado $exclude. Después, estamos añadiendo el argumento post__not_in a la segunda consulta, que excluirá entradas que se mostraron en el primer bucle.

Ahora, si visita su sitio web WordPress, verá que las entradas duplicadas han desaparecido.

Removing duplicate posts when using multiple posts in WordPress

Esperamos que este artículo te haya ayudado a aprender cómo evitar la visualización de entradas duplicadas con múltiples bucles en WordPress. Puede que también quieras ver nuestra guía sobre cómo elegir el mejor software de diseño web o ver nuestra selección experta de los mejores editores de arrastrar y soltar páginas de WordPress.

If you liked this article, then please subscribe to our YouTube Channel for WordPress video tutorials. You can also find us on Twitter and Facebook.

Descargo: Nuestro contenido está apoyado por los lectores. Esto significa que si hace clic en algunos de nuestros enlaces, podemos ganar una comisión. Vea cómo se financia WPBeginner , por qué es importante, y cómo puede apoyarnos. Aquí está nuestro proceso editorial .

Avatar

Editorial Staff at WPBeginner is a team of WordPress experts led by Syed Balkhi with over 16 years of experience in WordPress, Web Hosting, eCommerce, SEO, and Marketing. Started in 2009, WPBeginner is now the largest free WordPress resource site in the industry and is often referred to as the Wikipedia for WordPress.

El último kit de herramientas de WordPress

Obtenga acceso GRATUITO a nuestro kit de herramientas - una colección de productos y recursos relacionados con WordPress que todo profesional debería tener!

Reader Interactions

16 comentariosDeja una respuesta

  1. Syed Balkhi says

    Hey WPBeginner readers,
    Did you know you can win exciting prizes by commenting on WPBeginner?
    Every month, our top blog commenters will win HUGE rewards, including premium WordPress plugin licenses and cash prizes.
    You can get more details about the contest from here.
    Start sharing your thoughts below to stand a chance to win!

  2. Satriyo says

    Could someone tell me how to do this? I’m really new to this and need a help, please give me a clear example with the post ID, how to store it? Let’s say, mine is 1527.

  3. Gaurav says

    I’m running 2 loops before loops of a specific category in which I would like to avoid duplicates. So how do a store ID’s in the array from first two loops?

  4. Julie says

    AWESOME!! Thank you so much! And thank you SERGEYVLASOV for that last comment– Worked like a charm for my multiple loops. Hooray!! :)

  5. Pirooz says

    This method just works fine until both of 2 loops located in one file.
    but when I put the first loop in the header.php and another one in the index.php,
    in_array($post->ID, $do_nit_duplicate) returns null.
    what can I do?

  6. warren says

    Good afternoon all,

    will this work for my current issue with double display of posts on site? it literally displays a copy under the posts and the 1, 2, -> button…

    the site is I have deactivated re-activated plugins i am literally going nuts.

  7. sergeyvlasov says

    I think there is a flaw in this algorithm. It can spot no more than 1(one) duplication. So the magic line would look like
     
    $do_not_duplicate[] = $post->ID
     
    and then used as
     
    if(in_array($post->ID, $do_nit_duplicate)) continue;

Deja tu comentario

Gracias por elegir dejar un comentario. Tenga en cuenta que todos los comentarios son moderados de acuerdo con nuestros política de comentarios, y su dirección de correo electrónico NO será publicada. Por favor, NO utilice palabras clave en el campo de nombre. Tengamos una conversación personal y significativa.