Om du använder flera WordPress-sökningar för att visa olika inställningar av inlägg, kan du stöta på duplicerat innehåll. Detta beror på att vissa inlägg kan matcha mer än en slinga och visas två gånger.
WordPress har inte något inbyggt alternativ för att undvika dubbla inlägg i flera loopar. Men under våra 15+ års erfarenhet av att hantera olika webbplatser i WordPress har vi lärt oss hur man undviker det här problemet. Så vi har skapat ett anpassat fragment kodu som du kan lägga till på din webbplats och undvika att duplicerade inlägg visas i olika loopar.
I den här artikeln kommer vi att visa dig hur du enkelt kan undvika att duplicerade post visas med flera loopar i WordPress.
Så här visas Duplicator-poster i flera WordPress-slingor
När du skapar ett anpassat WordPress-tema eller en mall för en anpassad sida kan du ibland behöva använda flera WordPress-slingor.
Du kanske till exempel vill visa de senaste inläggen bredvid webbplatsens mest populära inlägg. Genom att visa alla inlägg i varje kategori kan du också hjälpa läsarna att hitta intressant innehåll.
I alla dessa exempel kan ett enskilt inlägg matcha kriterierna för flera slingor. När detta händer kommer WordPress att visa duplicerat content.
Detta duplicerade content kan få din site att se rörig och oprofessionell ut. Det tar också upp utrymme på skärmen utan att tillföra värde.
Eftersom du dynamiskt genererar posts för varje loop kan du inte manuellt förutsäga om ett duplicerat post kommer att visas i flera loopar.
Med detta sagt, låt oss titta på ett enkelt sätt att undvika duplicerade posts när vi hanterar flera loopar i WordPress.
Undvik duplicerade posts i flera WordPress-slingor
I den här guiden kommer vi att visa dig några exempel på WordPress-kod som orsakar duplicate post error och sedan dela ett code snippet som fixar problemet.
När du skapar ett WordPress barntema eller en custom template kan din kod vara helt annorlunda. Du kan dock använda vårt code snippet som utgångspunkt och sedan ändra det så att det passar din egen website.
Låt oss först skapa en duplicate post issue. I följande exempelkod visar vi alla posterna i kategorin ”travel” och alla posterna i kategorin ”news” utan att undvika dubbla postningar:
/****** 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();
?>
Som du kan se kontrollerar den här koden inte för duplicerade poster i någon av sökningarna.
Om ett post tillhör både kategorin ”news” och ”travel” kommer det att visas två gånger, som du kan se i följande image.
Låt oss fixa den här issue.
Order: För att undvika dubbla inlägg på din blogg i WordPress måste du tillfälligt lagra data om alla de posts som visas i den första loopen.
När du har den informationen kan du ändra den andra sökningen för att stoppa duplicerade poster från att visas i den andra slingan:
/****** 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();
?>
I koden ovan lagrar vi ID:n för posterna i en array som heter $exclude
. Därefter lägger vi till argumentet post__not_in
i den andra sökningen, vilket kommer att utesluta posts som visades i den första loopen.
Om du inte är bekant med att lägga till code snippets till din site, så är ett enklare sätt att använda WPCode. Det är det bästa code snippet plugin för WordPress som hjälper dig att add custom code utan att riskera att bryta din site.
Först måste du installera och aktivera pluginet WPCode. Om du behöver hjälp, vänligen se vår guide om hur du installerar ett plugin för WordPress.
Efter aktivering kan du gå till Code Snippets + Add Snippet från WordPress dashboard och sedan klicka på alternativet ”Add Your Custom Code (New Snippet)”.
Efter det kan du klistra in den anpassade koden i Code Preview area och ange en titel högst upp.
Du måste också välja ”Code Type” som PHP Snippet genom att clicka på dropdown-menyn.
När du har enter koden rullar du bara nedåt för att select the Section Infogaren.
Här kan du använda standardinställningen ”Auto Insert” och låta pluginet automatiskt lägga till koden på din site.
När du är klar sparar du bara snippet och aktiverar det.
För mer details, vänligen se vår guide om hur du lägger till custom code i WordPress.
Om du nu besöker din WordPress webbplats kommer du att se att de dubbla inläggen har försvunnit.
Vi hoppas att den här artikeln hjälpte dig att lära dig hur du undviker visning av dubbla inlägg med flera loopar i WordPress. Du kanske också vill se vår przewodnik om hur du inaktiverar valfritt antal inlägg i WordPress-loopen och hur du gör (fast)klistrade inlägg i WordPress.
If you liked this article, then please subscribe to our YouTube Channel for WordPress video tutorials. You can also find us on Twitter and Facebook.
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.
Administratör
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.
Administratör
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;