Podlove-Templates mit Twig (7): Status einer Episode

Ein sehr spannendes Feature, das uns die Verschmelzung von WordPress und Podlove bietet ist der Episoden-Status. Der ist Teil des WP Post-Objekts, das wir schon bei der Archivseite und der Spielerei mit for-Schleifen kurz kennengelernt haben. Episoden haben einen von mehreren Staten und damit können wir im Template ein bisschen was machen. Die verschiedenen Zustände sind:

  • Publish: Die Episode ist veröffentlicht und öffentlich sichtbar.
  • Private: Die Episode ist veröffentlicht und nur für eingeloggte Benutzer sichtbar.
  • Future: Die Episode hat ein Veröffentlichtungsdatum, das in der Zukunft liegt.
  • Pending: Die Episode ist bereit zur Veröffentlichung, aber bisher hat niemand auf „Veröffentlichen“ gedrückt oder ein Datum voreingestellt.
  • Draft: Die Episode liegt als Entwurf vor.
  • Trash: Die Episode wurde in den Papierkorb verschoben.

Wir können nicht den Status einer bestimmten Episode abfragen, sondern lediglich die Episoden mit einem bestimmten Status auflisten lassen. Das tun wir immer dann wenn wir eine for-Schleife wie diese einsetzen:

{% for episode in podcast.episodes %}

podcast.episodes nimmt ohne weitere Angaben an, dass es ausschließlich um Episoden mit dem Status publish gehen soll. Wir können unsere Abfrage aber erweitern und zum Beispiel:

{% for episode in podcast.episodes({post_status: 'future'}) %}

schreiben. Dann werden ausschließlich die Episoden berücksichtigt, die irgendwann in der Zukunft veröffentlicht werden sollen.

Info: In WordPress kannst Du beim Veröffentlichen einer Episode ganz rechts in der Spalte unter dem Reiter „Dokument“ neben „Veröffentlichen“ auf „Sofort“ klicken und dort mit diesem praktischen Kalender-Tool ein Datum und eine Uhrzeit festlegen, zu der Deine neueste Episode veröffentlicht werden soll.

Bis zu diesem Zeitpunkt hat die Episode den Status „future“, am 15. um 12.00 Uhr – oder wie in dem Beispiel aus dem Screenshot am 27.06.2020 um 15.52 Uhr – wechselt der Status auf „publish“.

Das nutzen wir beim Nord-Süd-Gefälle regelmäßig, weil die Episoden dieses Podcasts immer in der Mitte des Monats, am 15. um 12.00 Uhr, veröffentlicht werden sollen. Wir bereiten alles vor, haben den Schnitt und die Post-Produktion mit Auphonic erledigt und die Shownotes geschrieben und die Veröffentlichung geschieht zeitgesteuert.

Wie können wir das sinnvoll nutzen?

Ich finde diese Möglichkeit einfach sehr witzig und dachte mir, das wäre doch ein schöner Teaser auf neue Episoden. Beim Nord-Süd-Gefälle und bei Jörn Schaars feinem Podcast nutze ich das direkt auf der Startseite, beim Camping Caravan Podcast ist der Spaß ein bisschen versteckt auf der Archivseite:

{% for episode in podcast.episodes({post_status: 'future'}) %}
<p style="color: #a59f9f;margin-top:20px">Die nächste Episode 
<b>"{{ episode.post.post_title }}"</b> erscheint am 
{{ episode.publicationDate.format('j. F Y') }} um 
{{ episode.publicationDate.format('H:i') }} Uhr.</p>
{% endfor %}

Ich frage also am Beginn der Startseite alle Episoden mit Status „Future“ ab. Die werden in einem Absatz mit grauer Schriftfarbe angezeigt und da steht dann in etwa:

Die nächste Episode „JSFP247: Das hier ist nur zum Zeigen was post_status Future alles kann“ erscheint am 27.11.2019 um 4:35 Uhr.

Wir benutzen hier ausschließlich Template-Variablen, die wir schon aus anderen Lektionen dieses kleinen Tutorials kennen. Und weil das so ist, bohren wir diesen Teaser noch ein wenig auf. Wir können zum Beispiel hier auch schon die Dauer mit anzeigen. Dazu müssten wir die Dauer eigentlich nur, mittels {{ episode.duration }} in unsere Abfrage mit einbauen, aber schlimmstenfalls steht dann dort

Die nächste Episode „JSFP247: Das hier ist nur zum Zeigen was post_status Future alles kann“ erscheint am 27.11.2019 um 4:35 Uhr. Sie wird voraussichtlich lang sein.

wenn in Podlove keine Dauer hinterlegt ist. Das kann viele Gründe haben, vielleicht wurde die Zeit nicht übergeben, vielleicht ist aber auch das Audio noch gar nicht hinterlegt und bisher steht nur der Veröffentlichungstermin fest. Also fragen wir lieber ab, ob wir die Dauer des Audios schon kennen, bevor wir die Dauer einfügen:

{% for episode in podcast.episodes({post_status: 'future'}) %}
<p style="color: #a59f9f;margin-top:20px">Die nächste Episode 
<b>"{{ episode.post.post_title }}"</b> erscheint am 
{{ episode.publicationDate.format('j. F Y') }} um 
{{ episode.publicationDate.format('H:i') }} Uhr. 
{% if episode.duration.totalMilliseconds > 0 %} Du kannst Dich 
auf {{ episode.duration }} feinste Unterhaltung freuen. 
{% endif %}</p>
{% endfor %}

Können wir hier noch etwas mehr Spielkram einfügen?

Aber klar! Warum nicht auch einen Vorgeschmack darauf geben, worum es in der Episode gehen wird? Beim Camping Caravan Podcast nutze ich dafür die Kapitelmarken und das sieht am Ende so aus:

Die nächste Episode „CCP042: Sven hinter’m Deich“ erscheint am 29. Oktober 2019 um 20:00 Uhr und hat 20 Kapitelmarken, unter anderem „Umbau Technik und Shopping“, „Svens Campingjahr“, „Harz“, „Altmühltal“, „Allgäu“, „Südtirol“, „Im Harz vergessen“, „Zurück nach Südtirol“. Du kannst Dich auf 1:44:53 feinsten Camping-Content freuen.

Auf die Nummer bin ich fast ein bisschen stolz, denn was hier passiert ist, dass sowohl die Anzahl der Kapitelmarken ausgegeben wird als auch ein Teil der vorhandenen Kapitelmarken auch aufgeführt ist. So sieht der Code dafür aus:

{% for episode in podcast.episodes({post_status: 'future'}) %}
<p style="color: #a59f9f;margin-top:20px">Die nächste Episode 
<b>"{{ episode.post.post_title }}"</b> erscheint am 
{{ episode.publicationDate.format('j. F Y') }} um 
{{ episode.publicationDate.format('H:i') }} Uhr
{% if episode.chapters|length > 0 %} und hat 
{{ episode.chapters|length }} Kapitelmarken, unter anderem 
{% for chapter in episode.chapters|slice(4,8) %} 
"{{ chapter.title }}"{% if not loop.last %}, {% endif %}
{% endfor %}{% endif %}. 
{% if episode.duration.totalMilliseconds > 0 %} Du kannst 
Dich auf {{ episode.duration }} feinste Unterhaltung freuen.
{% endif %}</p>
{% endfor %}

Mit {% if episode.chapters|length > 0 %} fragen wir erstmal ab, ob in dieser Episode überhaupt Kapitelmarken angelegt sind. Falls nicht, können wir uns den Satz sparen, der entfällt ersatzlos. Aber wenn es welche gibt, geben wir mit {{ episode.chapters|length }} ihre Anzahl aus und dann sollen ja auch noch einzelne Kapitelmarken aufgelistet werden. Das geschieht mit {% for chapter in episode.chapters|slice(4,8) %}.

Technisch gesehen ist |slice(start,ende) ein Filter den wir auf die Liste der Kapitel anwenden. Die kommen als ein Array daher, also eine Aufzählung von Werten. Mit diesem Filter legen wir nun fest, dass uns an dieser Stelle lediglich der vierte bis achte Wert in diesem Array interessieren. Ich habe jetzt die Liste der Kapitelmarken an Position 4 beginnen lassen, weil die ersten drei Kapitelmarken immer „Intro & Begrüßung“, „Erlebnisse Jörn“ und „Erlebnisse Marco“ heißen. Mehr als vier Kapitelnamen möchte ich in diesem Teaser nicht auflisten.

Letztlich ist das natürlich Spielerei, so richtig revolutionär ist das nicht. Aber vor allem mit den slice-Filter wirst Du sicher etwas Sinnvolles anfangen können. Und wer weiß, vielleicht hilft Dir ja auch der post_status eines Tages mal weiter. Lass mich gern wissen, was Du damit angestellt hast.

Alle Lektionen in dieser Reihe:

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert