Für jeden benutzerdefinierten Beitragstyp in WordPress können wir ein individuelles single.php Template anlegen und nur speziell für diesen Beitragstyp ausliefern lassen. Das hat den Vorteil, dass sich der Template-Aufbau und somit das Design, benutzerdefinierter Beitragstypen grundsätzlich vom Standard-Beitragstyp „Post“ unterscheiden kann.
Grundsätzlich ist dieser Vorgang recht einfach. Ein Beispiel: Wir haben einen neuen benutzerdefinierten Beitragstyp „Rezepte“ und möchten dafür ein individuelles single.php Template nutzen. Den benutzerdefinierten Beitragstyp haben wir mit register_post_type() folgendermaßen angelegt:
Wie wir im oberen Beispiel sehen können, haben wir für unseren benutzerdefinierten Beitragstyp den Identifier bzw. Post-Type Key „recipe“register_post_type( 'recipe', ...
festgelegt. Dieser Post-Type Key ist wichtig für die Erstellung des individuellen single.php Templates, welches wir in WordPress speziell für unseren „Rezept“ Beitragstyp nutzen wollen.
So funktioniert’s: Erstelle eine neue PHP-Datei mit dem Namen single-recipe.php
und lade diese Datei in das Hauptverzeichnis deines Themes ../wp-content/themes/dein-theme/single-recipe.php
. Nun wird immer automatisch dein individuelles Single-Template für deinen Rezept-Beitragstyp verwendet, wenn du gerade ein spezielles Rezept besuchst.
Würde dein benutzerdefinierter Beitragstyp den Post-Type Key „portfolio“ verwenden, dann müsste der Name deiner Single-Template Datei single-portfolio.php
lauten.
Wie wir nun wissen, befindet sich das individuelle Single-Template eines benutzerdefinierten Beitragstypen immer im Hauptverzeichnis eines Themes, um von WordPress automatisch erkannt zu werden. Was können wir aber machen, wenn wir diese Template-Datei stattdessen von einem Plugin aus laden und einbinden möchten?
Für diesen Fall gibt es in der Tat eine Lösung. Mit Hilfe des WordPress-Filters single_template
können wir das Verzeichnis beeinflussen, von wo aus ein individuelles single.php Template geladen werden soll. Dafür ist die folgende Funktion sehr hilfreich:
In der oberen Funktion fragen wir zunächst den aktuellen Beitragstyp mit if( $post->post_type === 'recipe' ) {}
ab, um herauszufinden das wir den richtigen Beitragstyp treffen. In diesem Fall ist das, wie aus unserem Beispiel, der Beitragstyp „Rezept“.
Diese Funktion funktioniert so, dass bevorzugt ein vorhandenes „single-recipe.php“ Template aus dem Theme geladen wird. Nur wenn diese Datei nicht vorhanden ist, wird die „single-recipe.php“ Datei von unserem Plugin geladen und eingebunden. Das könnt ihr natürlich je nach Bedarf abändern.