Como Evitar a Exibição Duplicada de Posts com Múltiplos 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 alguns posts podem corresponder a mais de um loop e aparecer duas vezes.

O WordPress não vem com uma opção integrada para evitar posts duplicados em múltiplos loops. No entanto, em nossos mais de 15 anos de experiência lidando com diferentes sites WordPress, aprendemos como evitar esse problema. Portanto, criamos um snippet de código personalizado que você pode adicionar ao seu site e evitar que posts duplicados sejam exibidos em diferentes loops.

Neste artigo, mostraremos como evitar facilmente a exibição duplicada de posts com múltiplos loops no WordPress.

Evitando posts duplicados ao trabalhar com múltiplos loops do WordPress

Como Posts Duplicados Aparecem em Múltiplos Loops do WordPress

Ao criar um tema WordPress personalizado ou um modelo de página personalizado, você pode precisar usar múltiplos loops do WordPress.

Por exemplo, você pode querer mostrar seus posts recentes ao lado dos posts mais populares do seu site. Ao exibir todos os posts em 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 para múltiplos loops. Quando isso acontece, o WordPress exibirá conteúdo duplicado.

Esse conteúdo duplicado pode fazer com que seu site pareça bagunçado e pouco profissional. Ele também ocupa espaço na tela sem adicionar 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 ver uma maneira fácil de evitar posts duplicados ao lidar com vários loops no WordPress.

Evitando Posts Duplicados em Múltiplos Loops do WordPress

Para este guia, mostraremos um código de exemplo do WordPress que causa o erro de post duplicado e, em seguida, compartilharemos um trecho de código que corrige o problema.

Ao criar um tema filho do WordPress ou um modelo personalizado, seu código pode ser completamente diferente. No entanto, você pode usar nosso trecho de código como ponto de partida e, em seguida, modificá-lo para se adequar ao seu próprio site.

Primeiro, vamos criar um problema de post duplicado. No código de exemplo a seguir, estamos exibindo todos os posts da categoria 'travel' e todos os posts da categoria 'news' sem evitar posts duplicados:

/******  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, este código não verifica posts duplicados em nenhuma query.

Se um post pertencer às categorias 'news' e 'travel', ele aparecerá duas vezes, como você pode ver na imagem a seguir.

Como evitar a exibição de posts duplicados com múltiplos loops no WordPress

Vamos corrigir esse problema.

Para evitar posts duplicados em seu blog WordPress, você precisará armazenar temporariamente os dados de todos os posts exibidos no primeiro loop.

Depois de ter essas informações, você pode modificar a segunda query 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 os IDs dos Posts em um array chamado $exclude. Depois disso, estamos adicionando o argumento post__not_in à segunda query, que excluirá os posts que foram exibidos no primeiro loop.

Se você não está familiarizado com a adição de trechos de código ao seu site, uma maneira mais fácil é usar o WPCode. É o melhor plugin de trechos de código para WordPress que ajuda você a adicionar código personalizado sem o risco de quebrar seu site.

Primeiro, você precisará instalar e ativar o plugin WPCode. Se precisar de ajuda, consulte nosso guia sobre como instalar um plugin do WordPress.

Após a ativação, você pode ir para Trechos de Código + Adicionar Trecho no painel do WordPress e, em seguida, clicar na opção ‘Adicionar Seu Código Personalizado (Novo Trecho)’.

Adicionar um novo trecho de código personalizado no WPCode

Depois disso, você pode colar o código personalizado na área de Visualização de Código e inserir um título no topo.

Você também precisará selecionar o ‘Tipo de Código’ como Trecho PHP clicando no menu suspenso.

Insira o trecho de código personalizado

Após inserir o código, basta rolar para baixo para selecionar a seção de Inserção.

Aqui, você pode usar a configuração padrão de ‘Inserção Automática’ e deixar o plugin adicionar o código automaticamente ao seu site.

Métodos de inserção de trechos no WPCode

Assim que terminar, basta salvar o trecho e ativá-lo.

Para mais detalhes, consulte nosso guia sobre como adicionar código personalizado no WordPress.

Agora, se você visitar seu site WordPress, verá que as postagens duplicadas desapareceram.

Removendo posts duplicados ao usar múltiplos posts no WordPress

Esperamos que este artigo tenha ajudado você a aprender como evitar a exibição de postagens duplicadas com vários loops no WordPress. Você também pode consultar nosso guia sobre como desativar qualquer número de postagens em um loop do WordPress e como tornar postagens fixas no WordPress.

Se você gostou deste artigo, por favor, inscreva-se em nosso Canal do YouTube para tutoriais em vídeo do WordPress. Você também pode nos encontrar no Twitter e no Facebook.

Aviso: Nosso conteúdo é apoiado pelos leitores. Isso significa que, se você clicar em alguns de nossos links, poderemos ganhar uma comissão. Veja como o WPBeginner é financiado, por que isso importa e como você pode nos apoiar. Aqui está nosso processo editorial.

O Kit de Ferramentas Definitivo para WordPress

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

Interações do Leitor

15 CommentsLeave a Reply

  1. Alguém poderia me dizer como fazer isso? Sou muito novo nisso e preciso de ajuda, por favor, me dê um exemplo claro com o ID da postagem, como armazená-lo? Digamos que o meu seja 1527.

  2. Estou executando 2 loops antes de loops de uma categoria específica na qual eu gostaria de evitar duplicatas. Então, como armazeno os IDs no array dos dois primeiros loops?

  3. Este método funciona bem até que ambos os 2 loops estejam em um arquivo.
    mas quando coloco o primeiro loop no header.php e outro no index.php,
    in_array($post->ID, $do_nit_duplicate) retorna nulo.
    O que posso fazer?

  4. Boa tarde a todos,

    isso funcionará para o meu problema atual com a exibição duplicada de posts no site? ele literalmente exibe uma cópia sob os posts e o botão 1, 2, ->

    o site é Desativei e reativei plugins, estou literalmente ficando louco.

  5. Acho que há uma falha neste algoritmo. Ele não consegue detectar mais de 1 (uma) duplicação. Então a linha mágica seria
     
    $do_not_duplicate[] = $post->ID
     
    e então usada como
     
    if(in_array($post->ID, $do_nit_duplicate)) continue;

Deixe uma resposta

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