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

Como evitar a exibição de posts duplicados 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.

O WordPress não vem com uma opção integrada para evitar postagens duplicadas em vários loops. No entanto, em nossos mais de 15 anos de experiência lidando com diferentes sites do WordPress, aprendemos como evitar esse problema. Portanto, criamos um snippet de código personalizado que você pode adicionar ao seu site e evitar que postagens duplicadas sejam exibidas em diferentes loops.

Neste artigo, mostraremos como evitar facilmente a exibição de posts duplicados com vários loops no WordPress.

Avoding duplicate posts when working with multiple WordPress loops

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.

How to avoid duplicate post display with multiple loops in WordPress

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

Add a new custom code snippet in WPCode

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.

Enter custom code snippet

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.

Insertion methods for snippets in WPCode

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 o site do WordPress, verá que as postagens duplicadas desapareceram.

Removing duplicate posts when using multiple posts in WordPress

Esperamos que este artigo tenha ajudado você a aprender como evitar a exibição de posts duplicados com vários loops no WordPress. Talvez você também queira consultar nosso guia sobre como desativar qualquer número de posts no loop do WordPress e como criar posts fixos no WordPress.

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.

Divulgação: Nosso conteúdo é apoiado pelo leitor. Isso significa que, se você clicar em alguns de nossos links, poderemos receber uma comissão. Veja como o WPBeginner é financiado, por que isso é importante e como você pode nos apoiar. Aqui está nosso processo 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.

O kit de ferramentas definitivo WordPress

Obtenha acesso GRATUITO ao nosso kit de ferramentas - uma coleção de produtos e recursos relacionados ao WordPress que todo profissional deve ter!

Reader Interactions

15 ComentáriosDeixe uma resposta

  1. Nick J

    Is there a plugin that does this?

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

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

  4. Joe

    Just what I was looking for – thank you!

  5. Guilherme Alves

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

  6. Julie

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

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

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

  9. agus

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

    please
    #thanks

  10. Gabriel

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

  11. Greg

    @sergeyvlasov – Thanks that worked for me

    tho i changed

    $do_nit_duplicate to $do_not_duplicate

    ;)

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

Deixe uma resposta

Obrigado por deixar um comentário. Lembre-se de que todos os comentários são moderados de acordo com nossos política de comentários, e seu endereço de e-mail NÃO será publicado. NÃO use palavras-chave no campo do nome. Vamos ter uma conversa pessoal e significativa.