Im Custom Post Type Archiv ist get_post_type() nicht direkt verwendbar
Mittels get_post_type() ist es einfach den aktuellen Post-Typen zu erhalten und wird in der WordPress Entwicklung auch täglich eingesetzt.
So weit, so gut – allerdings könnte man meinen, im Archiv der Posts können wir auch einfach auf den Post-Type mittels get_post_type() zugreifen.
Das funktioniert aber (nicht immer) so einfach und korrekt. Es kann leicht zu Fehlern in der Programmlogik führen.
Leichte Fehlerquelle
Eine potenzielle Fehlerquelle ist die Verwendung von get_post_type() in Template-Parts.
Für „normale“ Seiten ist es durchaus valide einfach get_post_type() zu verwenden um den Post-Typen abzufragen.
Kommen diese Template-Parts aber später im Archiv zum Einsatz, kann es leicht zu unnachvollziehbaren Fehlern kommen. Denn die Abfrage liefert dann, unter Umständen, den falschen Post-Typen zurück!
Wann liefert get_post_type() im Archiv den falschen Post-Typen zurück?
Wenn wir für den Custom Post Type noch keine Posts erstellt haben!
Denn die get_post_type() Funktion ruft die globale $post Variable auf und holt davon den Post-Typen.
Wenn aber noch keine Posts erstellt sind, kann auch die globale $post Variable nicht mit einem Post des Custom Types versehen sein.
Dann bekommen wir als Post-Typ nur „Seite“ zurück, obwohl wir uns im Archiv eines Custom Post Types befinden! Es empfiehlt sich dann auf andere Funktionen auszuweichen.
Die Lösung
Die Lösung bringt eine Kombination aus is_post_type_archive() und get_queried_object().
Mittels is_post_type_archive() können wir sicher stellen, dass wir uns im Custom Post Type Archiv befinden um dann über get_queried_object() den Post Typen zu erhalten. Diese Funktion liefert im Archiv ein WP_Post_Type Objekt zurück, auch wenn es noch keine Posts für das Archiv gibt!
Hier ein kurzer Code Snippet um beispielsweise den Namen des Custom Post Types zu holen:
if ( is_post_type_archive() ) { $custom_post_type_name = get_queried_object()->name; }
So können wir sicher stellen, dass wir auch im Archiv auf den richtigen Post Type zurückgreifen!
Links
- https://developer.wordpress.org/reference/functions/get_post_type/
- https://developer.wordpress.org/reference/functions/is_post_type_archive/
- https://developer.wordpress.org/reference/functions/get_queried_object/
- (Leider ist der alte wordpress.org Codex-Artikel nicht mehr online. Also die alte originale WordPress-Dokumentation. Wir haben da vor Jahren stark daran mitgearbeitet, diesen Codex auch auf Deutsch übersetzt. Für get_queried_object gibt es viele Fallstricke, die im Codex-Artikel dokumentiert wurden. Dies nur als kleinen Rant am Rande, vielleicht liest das ja jemand der WordPress-Entscheider und entscheidet sich, die alten Codex-Seiten als Archiv wider zur Verfügung zu stellen bzw die neuen Doku-Seiten auch übersetzbar zu machen. Hinweis bzw Disclaimer bzw Offenlegung: Dieser Rant kommt nicht vom Autor dieses Artikels! )