Wenn wir einen Beitrag in WordPress erstellen, können wir diesen als „sticky“ markieren. D.h. das dieser Beitrag in einer Auflistung aller Beiträge, immer oben gehalten und an erster Stelle angezeigt wird. Wenn ein Beitrag also „sticky“ ist, wird er innerhalb der Beitragsliste auch dann ganz oben angezeigt, falls an anderer Beitrag neuer ist als der als „sticky“ gekennzeichnete Beitrag.

Diese Funktionalität, kann sehr hilfreich sein, wenn wir Beiträge besonders prominent darstellen wollen. Verwenden wir in WordPress jedoch benutzerdefinierte Beitragstypen (Custom Post Types), ist die Option einen Beitrag als „sticky“ zu markieren, leider nicht vorhanden.

In diesem Beitrag zeige ich euch eine Lösung, wie wir „sticky“ Beiträge auch für benutzerdefinierte Beitragstypen in WordPress hinzufügen können.

Wie erkennen wir ob ein Beitrag als „sticky“ markiert wurde?

Um „sticky“ Beiträge besonders hervorheben zu können, müssen wir in einem WordPress Theme abfragen, ob der aktuelle Beitrag immer oben gehalten werden soll. Dazu können wir die WordPress-Funktion is_sticky() verwenden. Das folgende Beispiel zeigt wie das funktioniert:

Diese Abfrage funktioniert jedoch nur solange wir den standard WordPress Beitragstyp „Post“ verwenden!

Nutzen wir zusätzliche Beitragstypen wie bspw. „Rezept“ oder „Produkt“, dann hat die Abfrage is_sticky() keinerlei Auswirkung, da diese Funktionalität, wie oben schon erwähnt, für benutzerdefinierte Beitragstypen nicht vorhanden ist.

Benutzerdefinierte Felder als Lösung für „sticky“ Beiträge in benutzerdefinierten Beitragstypen

Zunächst benötigen wir eine Möglichkeit, ein benutzerdefiniertes Feld in WordPress einzufügen. Ich verwende an dieser Stelle immer das Plugin Advanced Custom Fields (ACF). Hier werden hinzugefügte Felder in der Regel in einer Metabox, unterhalb des Beitragseditors eingebettet. ACF bietet jedoch auch die Möglichkeit, Felder innerhalb der Sidebar neben dem Beitragseditor anzuzeigen.

Als erstes erstellen wir im WordPress Backend unter „Individuelle Felder > Erstellen“ eine neue Feldgruppe und fügen darin ein neues Feld mit dem Feldtyp „True / False“ hinzu. Für jedes Feld das wir mit ACF erstellen, müssen wir eine eindeutige ID vergeben. In unserem Fall benennen wir die ID mit „sticky_post“ und speichern die Feldgruppe ab.

Wichtig: Mit Hilfe der ACF Feldgruppen-Einstellungen, können wir diese Feldgruppe so einrichten, dass sie nur auf der WordPress Editor-Seite mit bestimmten Beitragstypen angezeigt wird. Dazu findet ihr in den Einstellungen der ACF-Feldgruppe (welche wir angelegt haben) eine Option, um dieses Feld nur für bestimmte Beitragstypen anzeigen zu lassen. Haben wir also einen benutzerdefinierten Beitragstypen „Rezept“, dann wählen wir hier selbstverständlich „Rezept“ aus, um für diesen Beitragstyp das Feld für unsere Sticky Posts anzeigen zu lassen.

Nun haben wir ein benutzerdefiniertes Feld hinzugefügt, welches für die Aktivierung von „sticky“ Beiträgen verwendet werden soll. Anschließend erstellen wir eine kleine PHP-Funktionen, welche uns immer dann „TRUE“ zurückgibt, sobald es sich bei einem Beitrag um einen „Sticky“ Beitrag handelt. Eine solche Funktion könnte folgendermaßen aussehen:

Wie zu sehen ist, fragen wir in der Funktion wp_is_sticky() unter Verwendung der ACF-Funktion get_field('sticky_post', $post_id ) ab, ob ein Beitrag über unser benutzerdefiniertes Feld als „sticky“ markiert wurde. Hier finden wir auch unsere vergebene Feld-ID „sticky_post“ wieder. Solltet ihr also eine andere ID gewählt haben, so müsst ihr diese auch in der oberen Funktion abändern.

Sticky Beiträge in WordPress Templates hervorheben

Wie folgt können wir nun in WordPress Themes abfragen, ob es sich beim aktuellen Beitrag um einen „oben gehaltenen“ (sticky) Beitrag handelt. Ganz egal ob wir dafür nun einen benutzerdefinierten oder standard Beitragstypen verwenden. Diese Beiträge können wir so nun mit einer extra CSS-Klasse versehen, um sie gegenüber den normalen Beiträgen hervorzuheben.