WP Calendar Integration

WP Calendar ist ein sehr flexibles WordPress Kalender Plug-In. Für die Integration in den eigenen Blog stehen verschiedene, anpassbare Widgets zu Verfügung. Möchte man hingegen Events aus dem Kalender direkt im Theme (mittels PHP Funktionen) oder in eine Seite oder einen Artikel (mit Tags) integrieren, braucht es schon etwas mehr Know-How. Eine erste Hilfestellung befindet sich in der Einstellungsseite des Plug-Ins, wo sämtliche verfügbare Tags und Funktionen dokumentiert sind. Mit diesem Beitrag wird die “manuelle” Integration mit Tags noch etwas detailierter beschrieben.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:

Auflistung mit { events_printlist} ohne irgendwelche weitere Parameter:

    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.

    Beide diese 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:

    Testevent 1 @ Hotel Bellevue
    21.12.2010 08:00 – 10:00

    Skiweekend @ Davo
    23.12.2010 18:00 – 25.12.2010 15:00

    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

    Testevent 1 @ Hotel Bellevue
    21.12.2010 08:00 – 21.12.2010 10: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 ausgeben 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. mit dem Titel { 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>