Auf einem Blog auf der Startseite, in Kategorien- oder Tagseiten macht es Sinn dynamische Listen von Artikeln anzuzeigen. Diese Artikellisten lassen sich schnell über Widgets erzeugen. Meistens haben diese Listen einen Nachteil, dass sie Wiederholungen erzeugen; Artikel, die schon zB in der linken Hauptspalte angeteasert wurden tauchen in der rechten Sidebar dann nochmals auf. Bei einem solchen Link könnte man darüber hinweg sehen, aber es ist schon ärgerlich wenn es mehrfach passiert. Und gerade bei Übersichtsseiten tritt dieser Effekt gehäuft auf, wenn man nichts dagegen tut.

Lösung des Problems
Im Prinzip ist es ganz einfach diese Doppler bei WordPress zu vermeiden. Sie speichern einfach während der Loop ausgeführt wird die IDs der angezeigten Artikel in einem Array ab. Dazu notieren Sie eine kleine Codezeile direkt hinter dem Aufruf des Loops:

while (have_posts()) : the_post();
$do_not_duplicate[] = $post->ID;

Nun werden alle angezeigten ArtikelIDs in die Variable $do_not_duplicate gespeichert. Im zweiten Schritt blenden Sie nun beim zweiten Aufruf eines Loops die bereits angezeigten IDs aus. Hierfür gibt es mehrere Möglichkeiten. Sie schreiben eine Abfrage, ob die aktuelle ID bereits in dem Array gespeichert ist, und geben den Text nur aus, wenn das nicht der Fall ist. Hierzu lässt sich die PHP-Funktion in_array nutzen.

if( $post->ID == $do_not_duplicate ) continue;

oder

if (!in_array($post->ID,$do_not_duplicate)) {
… //Textausgabe
}

Im ersten Fall wird einfach die nächste ID aufgerufen. Im zweiten Fall wird der Text nur ausgegeben, wenn die ID noch unbekannt ist. Andererseits ist das wieder eine Klammer mehr auf die man aufpassen muss. Eine geschicktere Variante ist es bereits in der Abfrage query_posts die Duplikate auszuschließen.

query_posts(array(‚post__not_in’=>$do_not_duplicate));

Der Vorteil ist, dass der Loop unverändert bleibt – eigentlich die eleganteste Variante. In die Abfrage können Sie natürlich noch weitere Parameter hinein nehmen. Weitere Infos hierzu beim WordPress Codex

Fazit:
Gerade wenn man in Übersichtsseiten mehrere Abfragen / Loops hat macht es Sinn Duplikate auszuschließen. Beachten Sie dass dadurch die Anzahl der ausgegebenen IDs/Listenelemente reduziert wird. Erhöhen Sie bei Bedarf die Anzahl wieder mittels ’showposts‘ => 15 in query_posts. Wenn die Anzahl der Links eine fixe Anzahl sein soll (zB 10), könnten Sie 30 IDs abfragen, die Doppler entfernen und nach der Ausgabe von 10 Elementen abbrechen.

Dieses Ausschliessen der Doppler ist schon in manchen Übersichtsseiten wie Social Media aktiv, die aus 4 Loops besteht.