Integration von WP Calendar
Written at Samstag, 7. November 2009 on 16:58
WP Calendar ist ein sehr flexibles Wordpress Kalender Plug-In. Während die Administrationsoberfläche dem Wordpress “Standard” entspricht und sich ein Benutzer ohne weitere Hilfe darin zu Recht findet, erfordert die Integration in den eigenen Blog schon etwas mehr Know-How – nicht zuletzt wegen den vielen verschiedenen Integrationsmöglichkeiten.
Die Integration von WP Calender in einen Blog kann auf verschiedene Weise erfolgen. Die Integration in ein Theme (z.B. in die Sidebar) erfolgt normalerweise über die mitgelieferten Funktionen. Wer seine Kalendardaten jedoch einfach in Seiten oder Artikel einbinden möchte, der benötigt keine Programmierkenntnisse, sondern verwendet sog. Tags. Tags werden direkt innerhalb von Artikel und Seiten notiert und stehen im Falle von WP Calendar immer in geschweiften Klammern “{” bzw. “}”.
Die nachfolgende Beschreibung mit einigen Beispielen erklärt nicht jedes zu verwendende Feld im Details, da sämtliche Funktionen und Tags in der Dokumentation des Plug-Ins bereits ausführlich beschrieben sind. Vielmehr wird anhand ganz einfacher Beispiele aufgezeigt, wie die Grundbedürfnisse abzudecken und die einzelnen Tags zu verwenden sind.
Nachfolgend werden an diverser Stellen Tags definiert, welche zwischen der öffnenden geschweiften Klammer und dem nachfolgenden Inhalt ein Leerzeichen enthalten (z.B. { event_subject}). Dieses Leerzeichen wird nur hier verwendet, da ansonsten der Tag ausgewertet würde. In den eigenen Seiten und Artikel ist dieser Leerzeichen zu entfernen.
Eine Auflistung von Kalendereinträgen erstellen
Für das generieren einer Auflistung stehen zwei Tags zu Verfügung: Der Tag { events_print } generiert eine einfache Auflistung, der Tag { events_printlist } erzeugt eine hierarchische unsortierte Liste (HTML-Tag <UL></UL>). Der wesentliche Unterschied dieser Tags liegt darin, dass bei einer hierarchischen Liste eine datumsbezogene Gruppierung stattfinden kann. Untenstehend sieht man die beiden Tags in Aktion:
Auflistung mit { events_print } ohne irgendwelche weitere Parameter:
Freundliche Kundgebung
1. April 2010 16:00 - 17:00 @ Paradeplatz, ZürichRüdigers Geburtagsparty
23. Oktober 2010 16:00 - 24. Oktober 2010--- 01:00 @ Im Paradies
Auflistung mit { events_printlist} ohne irgendwelche weitere Parameter:
- Apr 2010
Freundliche Kundgebung
1. April 2010 16:00 - 17:00 @ Paradeplatz, Zürich- Okt 2010
Rüdigers Geburtagsparty
23. Oktober 2010 16:00 - 24. Oktober 2010--- 01:00 @ Im Paradies
Beide Varianten stellen in ihrer Grundvariante nur Termine aus der Zukunft darf. Aus den Einstellungen von WP Calendar wird zudem die maximale Anzahl Events sowie eine Ausgabevorlage ermittelt, wobei für die flache wie auch für die hierarchische Ausgabe eine separate Vorlage definiert werden kann. Für die hierarchische Ausgabe wird zudem in den Einstellungen festgelegt, ob und wie gruppiert werden soll, und welches Datumsformat für die entsprechende Überschrift verwendet werden soll. Die nachfolgenden Einstellungen entsprechen den Standardeinstellungen, wie sie nach der Installation vorbelegt sind und erzeugen das oben gezeigt Resultat.

Beide dieser Tags können aber auch mit Parametern erweitert werden, um die Ausgabe zu verändern. Grundsätzlich können mit den Parameter sämtliche Einstellungen übersteuert werden. Zudem kann die Selektion mit Hilfe von Filtern über Start-/Endezeitpunkt, Kategorie, Autor und Status die Ausgabe gefiltert werden. Alle Parameter sind in der Verwendungsdokumentation in den WP Calender Einstellungen detailliert beschrieben. Zudem sind dort auch die Standard-Werte ersichtlich.
Eine Auflistung, welche maximal 50 Anlässe für das Jahr 2009 der Kategorien 30 und 31 vom Autor 3 ausgibt, jedoch die Events 544 und 923 explizit ausschliesst und auch solche Events berücksichtigt, die zwar im Jahr 2008 bereits beginnen, aber im Jahr 2009 oder später zu ende gehen, und zudem noch nach Subjekt (anstelle vom Datum) sortiert ist, würde dann wie folgt aussehen:
{ events_print; number=50; datefrom=1230789600; dateend=1262325599; datemode=1; categories=30,31; author=3; exclude=923,544; orderby=subject }
Mit dem obenstehenden Beispiel wird eine Vielzahl der Parameter verwendet, in der Dokumentation sind noch weitere Parameter beschreiben, auf die an dieser Stelle nicht weiter eingegangen wird.
Denjenigen, die beim Parameter datefrom und dateend nicht wirklich etwas erkennen können, sei gesagt, dass hier nicht ein Datum und eine Uhrzeit in einfach leserlicher Form, sondern ein Unix-Timestamp verwendet werden muss. Einen einfachen Konverter findet man hier.
Details zu einem einzelnen Anlass ausgeben
Mit Tags, welche mit { event_ beginnen (im Gegensatz zu den Auflistungen, die mit { events_ beginnen), können sämtliche Daten von einem Event ausgegeben werden. Da es sich um einen spezifischen Event handelt, der nur über eine Id eindeutig identifiziert wird, muss die Id bekannt gemacht werden. Dies ist entweder über die URL möglich oder über den speziellen Tag { event_id; id=312 }.
Die beiden Varianten werden jedoch für unterschiedliche Szenarien verwendet. Habe ich einen Artikel, in welchem ich explizit Daten von einem Event einbinden möchte, macht es nicht sonderlich Sinn die Id über die URL mitzugeben, zumal Wordpress grundsätzlich in seinen Permalink keine Event Id vorsieht.
Statische “Inline” Deklaration
Vielmehr macht es an dieser Stelle Sinn, die Daten explizit durch die Angabe der Id im Tag { event_id } zu laden. Auf diese Weise können auch mehrere Events in einer sequentiellen Reihenfolge ausgegeben werden, allerdings macht es in diesem Fall unter Umständen mehr Sinn, eine Auflistung zu verwenden und mit Filtern zu arbeiten.
{ event_id; id=1}
<p>{ event_subject} @ { event_location}<br />{ event_startdate} { event_starttime} – { event_enddate} { event_endtime}</p>{ event_id; id=2}
<p>{ event_subject} @ { event_location} geschrieben von { event_author}, veröffentlicht am { event_publishdate}</p>
ergibt die folgende Ausgabe:
{event_subject} @ Paradeplatz, Zürich
1. April 2010 16:00 – 17:00{event_subject} @ Im Paradies geschrieben von faebu, veröffentlicht am 07.11.2009
Es fällt beim genauen Hinschauen auf, dass beim ersten Event keine Ausgabe für den Tag { event_enddate } stattfindet. Auch das liegt an den Einstellungen (Siehe Bild oben), welche grundsätzlich so eingestellt sind, dass das Enddatum (und auch die Endzeit) nur dann ausgegeben werden, wenn sie vom Startzeitpunkt abweichen. Durch das Hinzufügen des Parameters alwaysshowenddate mit dem Wert 1, kann die Ausgabe aber dennoch erzwungen werden:
{ event_id; id=1}
<p>{ event_subject} @ { event_location}<br />{ event_startdate} { event_starttime} – { event_enddate; alwaysshowenddate=1} { event_endtime}</p>
ergibt jetzt
{event_subject} @ Paradeplatz, Zürich
1. April 2010 16:00 – 1. April 2010--- 17:00
Dynamische Ausgabe und die “Seite für Einzelanzeige”
Um eine Seite dynamische mit Event Details zu befüllt, sollte die Event Id als URL Parameter event übergeben werden (z.B. www.meinblog.ch/2009/12/31/mein-artikel?event=681). Mit diesem Prinzip lässt sich eine Seite (nennen wir Sie doch auch gleich Events und vergeben wir den Permalink http://ww.meinblog.ch/events) anlegen, die nur dazu verwendet wird um die Details von einzelnen Events darzustellen. Diese Seite könnten wir doch nun bei der Aufliste hervorragend integrieren, wenn wird die Vorlage für die Listausgabe wie folgt anpassen würden:
<p><strong><a href=”http://www.meinblog.ch/events?event={ event_id}” title=”{ event_subject}”>{ event_subject}</a></strong><br />{ event_startdate} { event_starttime} – { event_enddate} { event_endtime} @ { event_location}</p>
Verwenden wir also diese Vorlage in einer Auflistung, erhalten wir eine Auflistung von Events, mit einer URL auf unsere erstellte Seite, die dann die Details anzeigen kann, in dem man dort vielleicht etwas in dieser Art einbauen würde:
{ event_subject}
Wo: { event_location}
Wann: { event_startdate} { event_starttime} – { event_enddate} { event_endtime}{ event_description}
Veröffentlicht am { event_publishdate} von { event_publisher}
Damit unsere Seite Events jedoch nicht einfach Events im Titel von Wordpress darstellt oder ich gar im meinem Theme den Seitentitel ausgebe und somit bei jedem Event zusätzlich noch ein Titel Event erscheint, kann man auch im Titel der Seite solche Tags verwenden. Anstatt die Seite Events zu benennen, könnte man die Seite einfach in { event_subject} @ { event_location} benennen.
Für was ist die “Seite für Einzelanzeige”
In den Einstellungen kann eine Seite für Einzelanzeige ausgewählt werden. Dies ist jedoch optional, damit dem oben beschriebenen Ansatz ohne Probleme auch auf die Seite für die Detailanzeige gesprungen werden kann. Dieser Ansatz einer statischen Verwendung einer URL hat jedoch den grossen Nachteil, dass ich unter Umständen beim Anpassen des Permalink (z.B. durch eine Reorganisation, oder durch das Ändern einer URL) überall die URL anpassen muss. Zudem hat diese Seite Events eigentlich gar keinen Inhalt, erscheint aber dennoch bei jeder Seiten-Auflistung, welche mit Wordpress Bordmitteln erzeugt wird.
An dieser Stelle kommt nun die Seite für Einzelanzeige ins Spiel. Wenn nämlich nun die erzeugte Seite Events bzw. { event_subject} @ { event_location} als die Seite für Einzelanzeige ausgewählt wird, kann in den Einstellungen nun definiert werden, dass die Seite in keiner Auflistung mehr erscheinen soll und Sie kann zudem in der Administrationsoberfläche der Seite entsprechend markiert und hervorgehoben werden. Der grosse Vorteil ergibt sich aber in der Vorlage. Während wird vorhin noch
<p><strong><a href=”http://www.meinblog.ch/events?event={ event_id}” title=”{ event_subject}”>{ event_subject}</a></strong><br />{ event_startdate} { event_starttime} – { event_enddate} { event_endtime} @ { event_location}</p>
notierten, können wir nun die ganze URL ersetzten und folgendes notieren:
<p><strong><a href=”” title=”{ event_subject}”>{ event_subject}</a></strong><br />{ event_startdate} { event_starttime} – { event_enddate} { event_endtime} @ { event_location}</p>
Schöne adminoberfläche, aber warum machst du nicht einfach ne widget funktion. Das ist ja so total benutzerunfreundlich.
Are you still developing this plugin? I’m using it and like it a lot. There’s just one annoying thing I solved myself, and it would be nice for everyone if you include it in the next version: when you enter a start date, the end date is not automatically updated. Most events take one day, and no events end earlier then they start. So it makes sense to update the event_to box to the selected date in the event_from box. It is very easy to solve this, just throw in an onChange event on the event_from input box.
at the moment i don’t find any time for fixing all the different bugs. i excpect to release the first final version at the end of february.
hallo simon. du hast absolut recht. widgets waren mir bis jetzt gar nicht bekannt… ich werde mit version 1.0.0 widgets ausliefern!
grüsse faebu