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

Nota editorial: Ganhamos uma comissão de links de parceiros no WPBeginner. As comissões não afetam as opiniões ou avaliações de nossos editores. Saiba mais sobre Processo editorial.

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.

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. Você também pode ajudar os leitores a encontrar conteúdo interessante mostrando todas as postagens de cada categoria.

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.

Agora, se você visitar seu 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 postagens duplicadas com vários loops no WordPress. Talvez você também queira consultar nosso guia sobre como escolher o melhor software de web design ou ver nossa seleção especializada dos melhores construtores de páginas do WordPress do tipo 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.

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

16 ComentáriosDeixe uma resposta

  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;

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.