WordPress bietet die bekannte Funktion Beiträge als „Sticky“ zu markieren um spezielle Beiträge innerhalb einer Beitragsliste immer oben zu halten, auch dann wenn ein Beitrag neuer ist, als der mit „Sticky“ markierte Beitrag.

Wenn wir in WordPress jedoch mit benutzerdefinierten Queries arbeiten, um bspw. eine Liste von Beiträgen mit der Funktion get_posts() ausgeben zu lassen, werden alle oben gehaltenen bzw. sticky Beiträge nicht mehr an erster Stelle der Liste angezeigt. Das hängt damit zusammen, dass Sticky Beiträge an dieser Stelle nicht ausgewertet werden.

Es gibt jedoch einen Weg, „sticky“ Beiträge auch unter Verwendung von get_posts() immer oben anzeigen zu lassen, so wie wir es von den Standard-Listen in WordPress gewohnt sind. In diesem Artikel zeige ich euch, wie wir das einfach lösen können.

Wie kann ich „sticky“ Beiträge immer oben anzeigen lassen?

Zunächst bauen wir uns eine Funktion, welche uns alle Beitrag-IDs ausliefert, die in unserer WordPress Installation zu finden sind. Die folgende PHP-Funktion wp_get_post_ids() tut genau das und gibt ein Array aller IDs wieder. Die Ausgabe können wir auch auf eine oder mehrere benutzerdefinierte Beitragstypen beschränken.

Alle sticky Beiträge von den normalen Beiträgen trennen und das Post-Array neu zusammensetzen

Im nächsten Schritt erstellen wir eine Funktion, welche alle „sticky“ WordPress Beiträge aus dem Post-ID Array von wp_get_post_ids() herausfiltert. Anschließend trennen wir alle diese „Sticky“ Beiträge von dem eigentlichen Haupt-Array und erhalten zwei verschiedene Arrays mit WordPress Beitrags-IDs. Das eine Array enthält ausschließlich alle Sticky-Beiträge und das andere Array beinhaltet alle Beiträge, welche nicht als „Sticky“ gekennzeichnet sind.

Nun müssen wir diese beiden Arrays nur noch mit array_merge() zusammensetzen, so dass das „sticky“ Array an erster und das andere Array an zweiter Stelle steht. Als Resultat erhalten wir eine Auflistung aller Beitrag-IDs, in welcher alle „oben gehaltenen“ Beiträge auch immer an erster Stelle stehen.

Das „sticky“ Array mit get_posts() ausgeben lassen

Mit Hilfe der beiden oberen Funktionen wp_get_post_ids() und wp_sticky_array() haben wir die Basis dafür erstellt, um in der Ausgabe alle „sticky“ Beitrage am Anfang unserer Beitragsliste anzuzeigen. Nun verwenden wir diese Funktionen in Verbindung mit get_posts() und übergeben das benutzerdefinierte Beitrags-Array über den Key post__in. Die Funktion get_posts() liefert uns nun alle Daten wie den Titel, die Beschreibung oder das Beitragsbild, welche als Inhalte für die Beitragsliste dienen. Wichtig ist, dass wir den Key orderby auf den Wert post__in setzen, damit die Beiträge genau in der Reihenfolge ausgegeben werden, wie wir sie benötigen:

Das ist alles was wir dafür benötigen, um „sticky“ Beiträge immer oben anzuzeigen, wenn wir benutzerdefinierte Queries mit get_posts() erstellen. Eine einfache Lösung, wenn man einmal dahinter gekommen ist, wie man diese kleine Herausforderung löst 🙂