Se stai utilizzando query WordPress multiple per visualizzare diversi set di post, potresti imbatterti in contenuti duplicati. Questo perché alcuni post potrebbero corrispondere a più di un loop e apparire due volte.
WordPress non dispone di un'opzione integrata per evitare post duplicati in loop multipli. Tuttavia, nella nostra esperienza di oltre 15 anni nella gestione di diversi siti WordPress, abbiamo imparato come evitare questo problema. Pertanto, abbiamo creato uno snippet di codice personalizzato che puoi aggiungere al tuo sito ed evitare che post duplicati vengano visualizzati in loop diversi.
In questo articolo, ti mostreremo come evitare facilmente la visualizzazione di post duplicati con loop multipli in WordPress.

Come appaiono i post duplicati nei loop multipli di WordPress
Quando crei un tema WordPress personalizzato o un modello di pagina personalizzato, potresti a volte dover utilizzare più loop di WordPress.
Ad esempio, potresti voler mostrare i tuoi post recenti accanto ai post più popolari del tuo sito. Visualizzando tutti i post in ogni categoria, potresti anche aiutare i lettori a trovare contenuti interessanti.
In tutti questi esempi, un singolo post può soddisfare i criteri per loop multipli. Quando ciò accade, WordPress visualizzerà contenuti duplicati.
Questi contenuti duplicati possono far apparire il tuo sito disordinato e poco professionale. Occupano anche spazio sullo schermo senza aggiungere valore.
Poiché stai generando dinamicamente post per ogni ciclo, non puoi prevedere manualmente se un post duplicato apparirà in più cicli.
Detto questo, diamo un'occhiata a un modo semplice per evitare post duplicati quando si ha a che fare con più cicli in WordPress.
Evitare post duplicati in più cicli di WordPress
Per questa guida, ti mostreremo del codice di esempio per WordPress che causa l'errore di post duplicato e poi condivideremo uno snippet di codice che risolve il problema.
Quando crei un tema figlio di WordPress o un template personalizzato, il tuo codice potrebbe essere completamente diverso. Tuttavia, puoi usare il nostro snippet di codice come punto di partenza e poi modificarlo per adattarlo al tuo sito web.
Innanzitutto, creiamo un problema di post duplicati. Nel seguente codice di esempio, stiamo mostrando tutti i post nella categoria 'travel' e tutti i post nella categoria 'news' senza evitare post 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 puoi vedere, questo codice non controlla i post duplicati in nessuna delle due query.
Se un post appartiene sia alla categoria 'news' che a quella 'travel', allora apparirà due volte, come puoi vedere nell'immagine seguente.

Risolviamo questo problema.
Per evitare post duplicati sul tuo blog WordPress, dovrai memorizzare temporaneamente i dati di tutti i post visualizzati nel primo ciclo.
Una volta che hai quelle informazioni, puoi modificare la seconda query per impedire che i post duplicati appaiano nel secondo ciclo:
/****** 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 sopra, stiamo memorizzando gli ID dei post in un array chiamato $exclude. Dopodiché, stiamo aggiungendo l'argomento post__not_in alla seconda query, che escluderà i post che sono stati visualizzati nel primo ciclo.
Se non hai familiarità con l'aggiunta di snippet di codice al tuo sito, un modo più semplice è usare WPCode. È il miglior plugin per snippet di codice per WordPress che ti aiuta ad aggiungere codice personalizzato senza rischiare di danneggiare il tuo sito.
Innanzitutto, dovrai installare e attivare il plugin WPCode. Se hai bisogno di aiuto, consulta la nostra guida su come installare un plugin WordPress.
Dopo l'attivazione, puoi andare su Code Snippets + Add Snippet dalla dashboard di WordPress e quindi fare clic sull'opzione ‘Add Your Custom Code (New Snippet)’.

Successivamente, puoi incollare il codice personalizzato nell'area Code Preview e inserire un titolo in alto.
Dovrai anche selezionare il ‘Code Type’ come PHP Snippet facendo clic sul menu a discesa.

Dopo aver inserito il codice, scorri semplicemente verso il basso per selezionare la sezione Insertion.
Qui, puoi usare l'impostazione predefinita di ‘Auto Insert’ e lasciare che il plugin aggiunga automaticamente il codice al tuo sito.

Una volta terminato, salva semplicemente lo snippet e attivalo.
Per maggiori dettagli, consulta la nostra guida su come aggiungere codice personalizzato in WordPress.
Ora, se visiti il tuo sito web WordPress, vedrai che i post duplicati sono scomparsi.

Speriamo che questo articolo ti abbia aiutato a imparare come evitare la visualizzazione di post duplicati con loop multipli in WordPress. Potresti anche voler consultare la nostra guida su come disabilitare qualsiasi numero di post in un loop di WordPress e come rendere i post in evidenza in WordPress.
Se ti è piaciuto questo articolo, iscriviti al nostro canale YouTube per tutorial video su WordPress. Puoi anche trovarci su Twitter e Facebook.

Nick J
Esiste un plugin che fa questo?
Satriyo
Qualcuno potrebbe dirmi come fare? Sono davvero nuovo a questo e ho bisogno di aiuto, per favore datemi un esempio chiaro con l'ID del post, come memorizzarlo? Diciamo che il mio è 1527.
Gaurav
Sto eseguendo 2 loop prima dei loop di una categoria specifica in cui vorrei evitare duplicati. Quindi come memorizzo gli ID nell'array dai primi due loop?
Joe
Esattamente quello che stavo cercando – grazie!
Guilherme Alves
Grazie mille :))) Mi aiuta molto!
Mi hai salvato la giornata <3
Supporto WPBeginner
Ciao Guilherme,
You are welcome
Don’t forget to follow us on Facebook for more WordPress tips and tutorials.
Amministratore
Julie
AWESOME!! Thank you so much! And thank you SERGEYVLASOV for that last comment– Worked like a charm for my multiple loops. Hooray!!
Pirooz
Questo metodo funziona bene finché entrambi i 2 cicli si trovano in un unico file.
ma quando metto il primo ciclo in header.php e un altro in index.php,
in_array($post->ID, $do_nit_duplicate) restituisce null.
cosa posso fare?
warren
Buon pomeriggio a tutti,
funzionerà per il mio problema attuale con la visualizzazione doppia dei post sul sito? visualizza letteralmente una copia sotto i post e il pulsante 1, 2, ->
il sito è ho disattivato riattivato i plugin sto letteralmente impazzendo.
agus
puoi aiutarmi?
Ho problemi con categorie duplicate sul mio sito
per favore
#grazie
Supporto WPBeginner
Sembra un problema specifico del tema, contatta gli sviluppatori del tema per assistenza.
Amministratore
Gabriel
Prima di iterare sul ciclo predefinito non dovremmo usare wp_reset_postdata(); ?
Greg
@sergeyvlasov – Grazie, ha funzionato per me
anche se ho cambiato
$do_nit_duplicate in $do_not_duplicate
Ron Hantman
Dai un'occhiata a questa soluzione che esegue questo compito al di fuori del ciclo:
http://wordpress.stackexchange.com/questions/61936/removing-duplicate-values-between-two-wordpress-queries/
sergeyvlasov
Penso che ci sia un difetto in questo algoritmo. Può individuare non più di 1 (una) duplicazione. Quindi la riga magica sarebbe
$do_not_duplicate[] = $post->ID
e poi usata come
if(in_array($post->ID, $do_nit_duplicate)) continue;