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

¿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 que quiera mostrar sus entradas recientes junto a las más populares de su sitio. Al mostrar todas las entradas de cada categoría, también puede ayudar a los lectores a encontrar contenidos interesantes.

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 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.

Si usted no está familiarizado con la adición de fragmentos de código a su sitio, entonces una manera más fácil es mediante el uso de WPCode. Es el mejor plugin de fragmentos de código para WordPress que te ayuda a añadir código personalizado sin riesgo de romper tu sitio.

En primer lugar, tendrás que instalar y activar el plugin WPCode. Si necesitas ayuda, consulta nuestra guía sobre cómo instalar un plugin de WordPress.

Tras la activación, puede ir a Fragmentos de código + Añadir fragmento desde el panel de control de WordPress y, a continuación, hacer clic en la opción “Añadir su código personalizado (nuevo fragmento)”.

Add a new custom code snippet in WPCode

Después, puede pegar el código personalizado en el área de Vista previa del código e introducir un título en la parte superior.

También tendrá que seleccionar el ‘Tipo de Código’ como PHP Snippet haciendo clic en el menú desplegable.

Enter custom code snippet

Una vez introducido el código, desplácese hacia abajo para seleccionar la sección Inserción.

Aquí, puedes usar la configuración por defecto de ‘Auto Insertar’ y dejar que el plugin añada automáticamente el código a tu sitio.

Insertion methods for snippets in WPCode

Una vez que haya terminado, simplemente guarde el fragmento y actívelo.

Para más detalles, consulte nuestra guía sobre cómo añadir código personalizado en WordPress.

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 varios bucles en WordPress. Puede que también quieras ver nuestra guía sobre cómo elegir el mejor software de diseño web o nuestra selección experta de los mejores creadores de páginas de WordPress de arrastrar y soltar.

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

    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. Nick J

    Is there a plugin that does this?

  3. Satriyo

    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.

  4. Gaurav

    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?

  5. Joe

    Just what I was looking for – thank you!

  6. Guilherme Alves

    Thank you soo much :))) This helps me alot!
    Save my day <3

  7. Julie

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

  8. Pirooz

    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?

  9. warren

    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.

  10. agus

    can you help me?
    I have proble with duplicate category in my site

    please
    #thanks

  11. Gabriel

    Before iterating over the default loop shouldn’t we use wp_reset_postdata(); ?

  12. Greg

    @sergeyvlasov – Thanks that worked for me

    tho i changed

    $do_nit_duplicate to $do_not_duplicate

    ;)

  13. sergeyvlasov

    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.