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.
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.
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)”.
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.
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.
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.
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.
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!
Nick J
Is there a plugin that does this?
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.
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?
Joe
Just what I was looking for – thank you!
Guilherme Alves
Thank you soo much :))) This helps me alot!
Save my day <3
WPBeginner Support
Hi Guilherme,
You are welcome Don’t forget to follow us on Facebook for more WordPress tips and tutorials.
Admin
Julie
AWESOME!! Thank you so much! And thank you SERGEYVLASOV for that last comment– Worked like a charm for my multiple loops. Hooray!!
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?
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.
agus
can you help me?
I have proble with duplicate category in my site
please
#thanks
WPBeginner Support
Seems like a theme specific issue, contact theme developers for support.
Admin
Gabriel
Before iterating over the default loop shouldn’t we use wp_reset_postdata(); ?
Greg
@sergeyvlasov – Thanks that worked for me
tho i changed
$do_nit_duplicate to $do_not_duplicate
Ron Hantman
Checkout this solution which does this task outside of the loop:
http://wordpress.stackexchange.com/questions/61936/removing-duplicate-values-between-two-wordpress-queries/
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;