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 articoli duplicati con loop multipli in WordPress

State cercando di correggere la visualizzazione di articoli duplicati con loop multipli in WordPress?

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

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 gli articoli recenti accanto a quelli più popolari del vostro sito. Mostrando tutti gli articoli di ogni categoria, potreste 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 gli articoli 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 articoli duplicati con loop multipli in WordPress. Potreste anche voler consultare la nostra guida su come scegliere il miglior software di web design o la nostra selezione di esperti dei migliori builder di pagine WordPress trascina e rilascia.

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

16 commentiLascia una risposta

  1. 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!

  2. Nick J

    Is there a plugin that does this?

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

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

  5. Joe

    Just what I was looking for – thank you!

  6. Guilherme Alves

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

  7. Julie

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

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

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

  10. agus

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

    please
    #thanks

  11. Gabriel

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

  12. Greg

    @sergeyvlasov – Thanks that worked for me

    tho i changed

    $do_nit_duplicate to $do_not_duplicate

    ;)

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