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

Nota editoriale: guadagniamo una commissione dai link dei partner su WPBeginner. Le commissioni non influenzano le opinioni o le valutazioni dei nostri redattori. Per saperne di più su Processo editoriale.

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

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.