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.
WordPress no viene con una opción integrada para evitar entradas duplicadas en múltiples bucles. Sin embargo, en nuestros más de 15 años de experiencia manejando diferentes sitios WordPress, hemos aprendido cómo evitar este problema / conflicto / incidencia. Por ello, hemos creado un fragmento de código personalizado que puedes añadir a tu sitio y evitar que se muestren entradas duplicadas en diferentes bucles.
En este artículo, le mostraremos cómo evitar fácilmente la visualización de entradas duplicadas con múltiples bucles en WordPress.
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 entradas más populares de su sitio. Si muestra 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.
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)”.
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.
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.
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.
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 práctica sobre cómo desactivar cualquier número de entradas en el bucle de WordPress y cómo hacer entradas fijas en 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.
Nick J
Is there a plugin that does this?
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.
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?
Joe
Just what I was looking for – thank you!
Guilherme Alves
Thank you soo much :))) This helps me alot!
Save my day <3
WPBeginner Support
Hi Guilherme,
You are welcome Don’t forget to follow us on Facebook for more WordPress tips and tutorials.
Administrador
Julie
AWESOME!! Thank you so much! And thank you SERGEYVLASOV for that last comment– Worked like a charm for my multiple loops. Hooray!!
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?
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.
agus
can you help me?
I have proble with duplicate category in my site
please
#thanks
WPBeginner Support
Seems like a theme specific issue, contact theme developers for support.
Administrador
Gabriel
Before iterating over the default loop shouldn’t we use wp_reset_postdata(); ?
Greg
@sergeyvlasov – Thanks that worked for me
tho i changed
$do_nit_duplicate to $do_not_duplicate
Ron Hantman
Checkout this solution which does this task outside of the loop:
http://wordpress.stackexchange.com/questions/61936/removing-duplicate-values-between-two-wordpress-queries/
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;