Trusted WordPress tutorials, when you need them most.
Beginner’s Guide to WordPress
Coppa WPB
25 Million+
Websites using our plugins
16+
Years of WordPress experience
3000+
WordPress tutorials
by experts

Come evitare la visualizzazione di pubblicazioni duplicate con loop multipli in WordPress

Se si utilizzano più query di WordPress per visualizzare diverse serie di pubblicazioni, è possibile che si verifichino contenuti duplicati. Questo perché alcune pubblicazioni potrebbero corrispondere a più di un loop e apparire due volte.

WordPress non dispone di un’opzione integrata per evitare la duplicazione di pubblicazioni in loop multipli. Tuttavia, negli oltre 15 anni di esperienza nella gestione di diversi siti WordPress, abbiamo imparato come evitare questo problema. Abbiamo quindi creato uno snippet di codice personalizzato che potete aggiungere al vostro sito per evitare che i post duplicati vengano mostrati in loop diversi.

In questo articolo vi mostreremo come evitare facilmente la visualizzazione di articoli duplicati con loop multipli in WordPress.

Avoding duplicate posts when working with multiple WordPress loops

Come appaiono gli articoli duplicati in più loop di WordPress

Quando si crea un tema WordPress personalizzato o un template di pagina personalizzato, a volte è necessario utilizzare più loop di WordPress.

Ad esempio, potreste voler mostrare i post recenti accanto a quelli più popolari del vostro sito. Mostrando tutti i post di ogni categoria, si possono anche aiutare i lettori a trovare contenuti interessanti.

In tutti questi esempi, un singolo articolo può corrispondere ai criteri di più loop. In questo caso, WordPress visualizza i contenuti duplicati.

Questi contenuti duplicati possono far sembrare il sito disordinato e poco professionale. Inoltre, occupano spazio sullo schermo senza aggiungere valore.

Poiché si generano dinamicamente articoli per ogni loop, non è possibile prevedere manualmente se un articolo duplicato apparirà in più loop.

Detto questo, vediamo un modo semplice per evitare articoli duplicati quando si ha a che fare con loop multipli in WordPress.

Evitare articoli duplicati in più loop di WordPress

In questa guida vi mostreremo alcuni esempi di codice WordPress che causano l’errore di duplicazione degli articoli e condivideremo uno snippet di codice che corregge il problema.

Quando si crea un tema child di WordPress o un template personalizzato, il codice può essere completamente diverso. Tuttavia, è possibile utilizzare il nostro frammento di codice come punto di partenza e modificarlo per adattarlo al proprio sito web.

Per prima cosa, creiamo un problema di articoli duplicati. Nel codice di esempio che segue, si visualizzano tutti gli articoli della categoria “viaggi” e tutti gli articoli della categoria “notizie”, senza evitare i duplicati:

/******  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();
?>

Come si può notare, questo codice non controlla la presenza di articoli duplicati in nessuna delle due query.

Se un articolo appartiene sia alla categoria “notizie” che a quella “viaggi”, apparirà due volte, come si può vedere nell’immagine seguente.

How to avoid duplicate post display with multiple loops in WordPress

Correggiamo questo problema.

Per evitare di duplicare gli articoli sul vostro blog WordPress, dovrete memorizzare temporaneamente i dati di chi è stato visualizzato nel primo loop.

Una volta ottenute queste informazioni, è possibile modificare la seconda query per impedire che nel secondo loop appaiano articoli duplicati:

/******  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();
?>

Nel codice precedente, memorizziamo gli ID degli articoli in un array chiamato $exclude. Successivamente, aggiungiamo l’argomento post__not_in alla seconda query, che escluderà i post visualizzati nel primo loop.

Se non avete familiarità con l’aggiunta di snippet di codice al vostro sito, un modo più semplice è usare WPCode. È il miglior plugin di snippet di codice per WordPress che vi aiuta ad aggiungere codice personalizzato senza rischiare di rompere il vostro sito.

Per prima cosa, è necessario installare e attivare il plugin WPCode. Se avete bisogno di aiuto, consultate la nostra guida su come installare un plugin di WordPress.

Dopo l’attivazione, è possibile andare su Code Snippets + Add Snippet dalla dashboard di WordPress e fare clic sull’opzione “Add Your Custom Code (New Snippet)”.

Add a new custom code snippet in WPCode

Successivamente, è possibile incollare il codice personalizzato nell’area Anteprima codice e inserire un titolo in alto.

È inoltre necessario selezionare il ‘Tipo di codice’ come Snippet PHP facendo clic sul menu a discesa.

Enter custom code snippet

Dopo aver inserito il codice, è sufficiente scorrere verso il basso per selezionare la sezione Pannello di inserimento.

È possibile utilizzare l’impostazione predefinita di “Auto Insert” e lasciare che il plugin aggiunga automaticamente il codice al sito.

Insertion methods for snippets in WPCode

Una volta terminato, è sufficiente salvare lo snippet e attivarlo.

Per maggiori dettagli, consultare la nostra guida su come add-on di codice personalizzato in WordPress.

Ora, se visitate il vostro sito web WordPress, vedrete che i post duplicati sono scomparsi.

Removing duplicate posts when using multiple posts in WordPress

Speriamo che questo articolo vi abbia aiutato a capire come evitare la visualizzazione di post duplicati con loop multipli in WordPress. Potreste anche voler consultare la nostra guida su come disabilitare un numero qualsiasi di pubblici nel loop di WordPress e su come rendere i post in evidenza in WordPress.

Se questo articolo vi è piaciuto, iscrivetevi al nostro canale YouTube per le esercitazioni video su WordPress. Potete trovarci anche su Twitter e Facebook.

Divulgazione: I nostri contenuti sono sostenuti dai lettori. Ciò significa che se cliccate su alcuni dei nostri link, potremmo guadagnare una commissione. Vedi come WPBeginner è finanziato , perché è importante e come puoi sostenerci. Ecco il nostro processo editoriale .

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.

Il kit di strumenti WordPress definitivo

Ottenete l'accesso gratuito al nostro kit di strumenti - una raccolta di prodotti e risorse relative a WordPress che ogni professionista dovrebbe avere!

Reader Interactions

15 commentiLascia una risposta

  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;

Lascia una risposta

Grazie per aver scelto di lasciare un commento. Tenga presente che tutti i commenti sono moderati in base alle nostre politica dei commenti e il suo indirizzo e-mail NON sarà pubblicato. Si prega di NON utilizzare parole chiave nel campo del nome. Avremo una conversazione personale e significativa.