Versuchen Sie, die Anzeige doppelter Beiträge mit mehreren Schleifen in WordPress zu beheben?
Wenn Sie mehrere WordPress-Abfragen verwenden, um verschiedene Sätze von Beiträgen anzuzeigen, können Sie auf doppelte Inhalte stoßen. Das liegt daran, dass einige Beiträge möglicherweise mehr als einer Schleife entsprechen und doppelt erscheinen.
In diesem Artikel zeigen wir Ihnen, wie Sie die Anzeige von doppelten Beiträgen mit mehreren Schleifen in WordPress leicht vermeiden können.
Wie doppelte Beiträge in mehreren WordPress-Schleifen erscheinen
Wenn Sie ein benutzerdefiniertes WordPress-Theme oder eine benutzerdefinierte Seitenvorlage erstellen, müssen Sie manchmal mehrere WordPress-Schleifen verwenden.
So können Sie zum Beispiel Ihre neuesten Beiträge neben den beliebtesten Beiträgen Ihrer Website anzeigen. Sie könnten den Lesern auch helfen, interessante Inhalte zu finden, indem Sie alle Beiträge in jeder Kategorie anzeigen.
In all diesen Beispielen kann ein einzelner Beitrag die Kriterien für mehrere Schleifen erfüllen. Wenn dies geschieht, zeigt WordPress doppelte Inhalte an.
Diese doppelten Inhalte können Ihre Website unordentlich und unprofessionell aussehen lassen. Außerdem beanspruchen sie Platz auf dem Bildschirm, ohne einen Mehrwert zu bieten.
Da Sie Beiträge für jede Schleife dynamisch generieren, können Sie nicht manuell vorhersagen, ob ein doppelter Beitrag in mehreren Schleifen erscheinen wird.
Schauen wir uns also eine einfache Möglichkeit an, um doppelte Beiträge zu vermeiden, wenn man mit mehreren Schleifen in WordPress arbeitet.
Vermeidung von doppelten Beiträgen in mehreren WordPress-Schleifen
In diesem Leitfaden zeigen wir Ihnen ein Beispiel für WordPress-Code, der den Fehler „doppelter Beitrag“ verursacht, und teilen dann einen Codeausschnitt, der das Problem behebt.
Wenn Sie ein WordPress Child-Theme oder eine benutzerdefinierte Vorlage erstellen, kann Ihr Code völlig anders aussehen. Sie können jedoch unser Code-Snippet als Ausgangspunkt verwenden und es dann an Ihre eigene Website anpassen.
Lassen Sie uns zunächst ein Problem mit doppelten Beiträgen erstellen. Im folgenden Beispielcode werden alle Beiträge in der Kategorie „Reisen“ und alle Beiträge in der Kategorie „Nachrichten“ angezeigt, ohne doppelte Beiträge zu vermeiden.
/****** 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();
?>
Wie Sie sehen können, prüft dieser Code in keiner der Abfragen auf doppelte Beiträge.
Wenn ein Beitrag sowohl zur Kategorie „Nachrichten“ als auch zur Kategorie „Reisen“ gehört, wird er zweimal angezeigt, wie Sie auf dem folgenden Bild sehen können.
Lassen Sie uns dieses Problem beheben.
Um doppelte Beiträge in Ihrem WordPress-Blog zu vermeiden, müssen Sie die Daten aller Beiträge, die in der ersten Schleife angezeigt werden, vorübergehend speichern.
Sobald Sie diese Informationen haben, können Sie die zweite Abfrage ändern, um zu verhindern, dass doppelte Beiträge in der zweiten Schleife erscheinen:
/****** 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();
?>
Im obigen Code speichern wir die Post-IDs in einem Array namens $exclude
. Danach fügen wir das Argument post__not_in
zur zweiten Abfrage hinzu, die Beiträge ausschließt, die in der ersten Schleife angezeigt wurden.
Wenn Sie nun Ihre WordPress-Website besuchen, werden Sie feststellen, dass die doppelten Beiträge verschwunden sind.
Wir hoffen, dass dieser Artikel Ihnen geholfen hat zu erfahren, wie Sie die Anzeige doppelter Beiträge mit mehreren Schleifen in WordPress vermeiden können. Vielleicht interessiert Sie auch unser Leitfaden zur Auswahl der besten Webdesign-Software oder unsere Expertenauswahl der besten Drag-and-Drop-Seitenerstellungsprogramme für WordPress.
Wenn Ihnen dieser Artikel gefallen hat, dann abonnieren Sie bitte unseren YouTube-Kanal für WordPress-Videotutorials. Sie können uns auch auf Twitter und Facebook finden.
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!
Nick J says
Is there a plugin that does this?
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.
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?
Joe says
Just what I was looking for – thank you!
Guilherme Alves says
Thank you soo much :))) This helps me alot!
Save my day <3
WPBeginner Support says
Hi Guilherme,
You are welcome Don’t forget to follow us on Facebook for more WordPress tips and tutorials.
Admin
Julie says
AWESOME!! Thank you so much! And thank you SERGEYVLASOV for that last comment– Worked like a charm for my multiple loops. Hooray!!
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?
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.
agus says
can you help me?
I have proble with duplicate category in my site
please
#thanks
WPBeginner Support says
Seems like a theme specific issue, contact theme developers for support.
Admin
Gabriel says
Before iterating over the default loop shouldn’t we use wp_reset_postdata(); ?
Greg says
@sergeyvlasov – Thanks that worked for me
tho i changed
$do_nit_duplicate to $do_not_duplicate
Ron Hantman says
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 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;