Wenn Sie mehrere Abfragen von WordPress verwenden, um verschiedene Gruppen 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.
WordPress verfügt nicht über eine integrierte Option zur Vermeidung doppelter Beiträge in mehreren Schleifen. In unserer über 15-jährigen Erfahrung im Umgang mit verschiedenen WordPress Websites haben wir jedoch gelernt, wie man dieses Problem vermeiden kann. Daher haben wir ein individuelles Code-Snippet erstellt, das Sie zu Ihrer Website hinzufügen können, um zu verhindern, dass doppelte Beiträge in verschiedenen Schleifen angezeigt werden.
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 individuelles WordPress-Theme oder ein individuelles Template für eine Seite 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. Indem Sie alle Beiträge in jeder Kategorie anzeigen, können Sie den Besuchern auch helfen, interessante Inhalte zu finden.
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 mit dem Hinzufügen von Code-Snippets zu Ihrer Website nicht vertraut sind, ist die Verwendung von WPCode ein einfacher Weg. Es ist das beste Code-Snippet-Plugin für WordPress, mit dem Sie benutzerdefinierten Code hinzufügen können, ohne zu riskieren, dass Ihre Website beschädigt wird.
Zunächst müssen Sie das WPCode-Plugin installieren und aktivieren. Wenn Sie Hilfe benötigen, lesen Sie bitte unsere Anleitung zur Installation eines WordPress-Plugins.
Nach der Aktivierung können Sie im WordPress-Dashboard auf Code-Snippets + Snippet hinzufügen gehen und dann auf die Option „Eigenen Code hinzufügen (neues Snippet)“ klicken.
Danach können Sie den benutzerdefinierten Code in den Codevorschaubereich einfügen und oben einen Titel eingeben.
Sie müssen auch den „Code-Typ“ als PHP-Snippet auswählen, indem Sie auf das Dropdown-Menü klicken.
Nachdem Sie den Code eingegeben haben, blättern Sie einfach nach unten und wählen den Abschnitt Einfügen.
Hier können Sie die Standardeinstellung „Automatisch einfügen“ verwenden und das Plugin den Code automatisch zu Ihrer Website hinzufügen lassen.
Wenn Sie fertig sind, speichern Sie einfach das Snippet und aktivieren es.
Weitere Einzelheiten finden Sie in unserer Anleitung zum Hinzufügen von benutzerdefiniertem Code in WordPress.
Wenn Sie jetzt Ihre WordPress-Website besuchen, werden Sie sehen, dass die doppelten Beiträge verschwunden sind.
Wir hoffen, dass dieser Artikel Ihnen geholfen hat zu lernen, wie man die Anzeige von doppelten Beiträgen mit mehreren Schleifen in WordPress vermeiden kann. Vielleicht interessiert Sie auch unsere Anleitung, wie Sie eine beliebige Anzahl von Beiträgen in einer WordPress-Schleife deaktivieren können und wie Sie oben gehaltene Beiträge in WordPress erstellen können.
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.
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;