Você está tentando corrigir a exibição de postagens duplicadas com vários loops no WordPress?
Se você estiver usando várias consultas do WordPress para exibir diferentes conjuntos de posts, poderá encontrar conteúdo duplicado. Isso ocorre porque algumas postagens podem corresponder a mais de um loop e aparecer duas vezes.
Neste artigo, mostraremos como evitar facilmente a exibição de posts duplicados com vários loops no WordPress.
Como os posts duplicados aparecem em vários loops do WordPress
Ao criar um tema personalizado do WordPress ou um modelo de página personalizado, às vezes você pode precisar usar vários loops do WordPress.
Por exemplo, talvez você queira mostrar suas postagens recentes ao lado das postagens mais populares do seu site. Ao mostrar todas as publicações de cada categoria, você também pode ajudar os leitores a encontrar conteúdo interessante.
Em todos esses exemplos, um único post pode corresponder aos critérios de vários loops. Quando isso acontece, o WordPress exibe conteúdo duplicado.
Esse conteúdo duplicado pode fazer com que seu site pareça confuso e pouco profissional. Ele também ocupa espaço na tela sem agregar valor.
Como você está gerando posts dinamicamente para cada loop, não é possível prever manualmente se um post duplicado aparecerá em vários loops.
Dito isso, vamos dar uma olhada em uma maneira fácil de evitar postagens duplicadas ao lidar com vários loops no WordPress.
Como evitar postagens duplicadas em vários loops do WordPress
Neste guia, mostraremos alguns exemplos de código do WordPress que causam o erro de postagem duplicada e, em seguida, compartilharemos um trecho de código que corrige o problema.
Ao criar um tema filho ou modelo personalizado do WordPress, seu código pode ser completamente diferente. No entanto, você pode usar nosso snippet de código como ponto de partida e modificá-lo para se adequar ao seu próprio site.
Primeiro, vamos criar um problema de postagem duplicada. No código de exemplo a seguir, estamos exibindo todas as postagens na categoria “viagens” e todas as postagens na categoria “notícias” sem evitar postagens 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 você pode ver, esse código não verifica se há postagens duplicadas em nenhuma das consultas.
Se uma postagem pertencer às categorias “notícias” e “viagens”, ela aparecerá duas vezes, como você pode ver na imagem a seguir.
Vamos corrigir esse problema.
Para evitar postagens duplicadas em seu blog do WordPress, você precisará armazenar temporariamente os dados sobre todas as postagens exibidas no primeiro loop.
Quando tiver essas informações, você poderá modificar a segunda consulta para impedir que posts duplicados apareçam no segundo loop:
/****** 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();
?>
No código acima, estamos armazenando IDs de posts em uma matriz chamada $exclude
. Depois disso, estamos adicionando o argumento post__not_in
à segunda consulta, que excluirá os posts que foram exibidos no primeiro loop.
Se você não estiver familiarizado com a adição de trechos de código ao seu site, uma maneira mais fácil é usar o WPCode. É o melhor plug-in de snippet de código para WordPress que ajuda você a adicionar código personalizado sem correr o risco de danificar seu site.
Primeiro, você precisará instalar e ativar o plug-in WPCode. Se precisar de ajuda, consulte nosso guia sobre como instalar um plug-in do WordPress.
Após a ativação, você pode ir para Code Snippets + Add Snippet no painel do WordPress e clicar na opção “Add Your Custom Code (New Snippet)”.
Depois disso, você pode colar o código personalizado na área Code Preview (Visualização de código) e inserir um título na parte superior.
Você também precisará selecionar o “Code Type” (Tipo de código) como PHP Snippet clicando no menu suspenso.
Depois de inserir o código, basta rolar para baixo para selecionar a seção Inserção.
Aqui, você pode usar a configuração padrão de “Auto Insert” e permitir que o plug-in adicione automaticamente o código ao seu site.
Quando terminar, basta salvar o snippet e ativá-lo.
Para obter mais detalhes, consulte nosso guia sobre como adicionar código personalizado no WordPress.
Agora, se você visitar seu site do WordPress, verá que as postagens duplicadas desapareceram.
Esperamos que este artigo tenha ajudado você a aprender como evitar a exibição de postagens duplicadas com vários loops no WordPress. Talvez você também queira ver nosso guia sobre como escolher o melhor software de web design ou nossa seleção especializada dos melhores construtores de páginas do WordPress para arrastar e soltar.
Se você gostou deste artigo, inscreva-se em nosso canal do YouTube para receber tutoriais em vídeo sobre o WordPress. Você também pode nos encontrar no Twitter e no Facebook.
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!
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;