Eine Liste von Events mit einem eigenen Post-Typ erstellen - Guru 2.0
Eine Liste von Events mit einem eigenen Post-Typ erstellen

Eine Liste von Events mit einem eigenen Post-Typ erstellen

WordPress Frage

WordPress Frage

Vor kurzem erhielt ich eine interessante Frage zum Thema Posts und WordPress via eMail. Da ich in meinem aktuellen Buch WordPress-Tricks und Tweaks nicht alles behandeln konnte, nehme ich die Frage hier auf und entwickle daraus einen neuen Tweak.

Ich würde gerne eine Liste von geplanten Events auf meinem Blog darstellen. Es ist aber leider so, dass ich ein Kalender-PlugIn verwende und es nicht mit diesem lösen kann/will. Aber jedesmal einen eigenen Post schreiben ist mir auch zu aufwendig, da die Sortierung nich so gut funktioniert. Wie könnte man das lösen?

Ich hätte da ein kleine Idee. Sie ist ein wenig aufwendig zu programmieren, aber ich finde die Lösung nicht so schlecht. Für ein paar Dinge musste ich in die Trickkiste greifen, damit es so funktioniert wie es soll. Aber naja der Zweck heiligt die Mittel. Fast komplett verzichtet habe ich auf die Prüfung der Benutzereingaben verzichtet. Die könnt ihr ja gerne noch hinzufügen. Aber der Tweak ist eigentlich für den Blogbetreiber gedacht und der sollte sich an die Eingaberegeln halten. Wenn natürlich verschiedene Leute Daten eingeben, brauchen wir auch diese Sicherheitsstufe. Aber schauen wir mal, wie das ganze funktionieren könnte.

1. Grundlagen

Die Lösung geht über die benutzerdefinierten Posts von WordPress. Meine Idee ist, dass ich so einen Post-Typ definiere und nur den Titel als Eingabe erlaube. Ich lasse auch noch benutzerdefinierte Felder aus Metainformation zu, damit man diese (falls es der Blog braucht) noch definieren kann. Zusätzlich brauchen wir je zwei Eingabefelder für den Beginn (Datum & Zeit) und das Ende des Events.

Dann schreiben wir zwar eigene Posts für jedes Event, aber eben nur die wichtigsten Daten. Zusätzlich werden diese Posts auch nicht im Standard-Loop angezeigt. Dadurch können wir einen eigenen Loop definieren und eine Liste der Events generieren.

Weiters hätte ich gerne im Dashboard einen Überblick der eingetragenen Events. Auch das werden wir erstellen und eine Liste dafür programmieren.

Wie immer gebe ich nur sehr kurze Erklärungen zu dem jeweiligen Code. Aber für das genaue Verständnis der einzelnen Zeilen habe ich – wie immer – eine Bemerkungszeile direkt im SourceCode eingefügt.

2. Design

Für die Lösung ist das Design prinzipiell Dir überlassen, aber für das Dashboard greife ich Dir ein wenig unter die Arme. Du findest hier ein komplettes Stylesheet für die Eingabe im DashBoard. Wir werden nicht alle Stile verwenden, aber vielleicht kannst Du sie trotzdem (später) brauchen. Nimm den CSS-Code und speichere ihn in eine Datei mit dem Namen metabox_events.css in das Hauptverzeichnis Deines aktiven Themas.

3. Der benutzerdefinierte Post

eigener Artikeltyp

eigener Artikeltyp

Jetzt benötigen wir die Datei functions.php im aktiven Thema. Falls diese Datei bei Dir nicht vorhanden ist, kannst Du sie einfach erstellen. Vergiss nur nicht am Anfang <?php und in der letzten Zeile ?> zu schreiben. Wir definieren jetzt eine eigenen Funktion, welche die Beschriftung der Elemente des Posts und den Posttyp mit dem Namen events registriert. Die Funktion binden wir mit einem Hook add_action() in WordPress ein. Nachdem Du das erledigt hast und das Dashboard neu lädst, siehst Du den neuen Artikeltyp in der Seitenleiste.

4. Die eigenen Eingabefelder

Event hinzufügen

Event hinzufügen

Natürlich könnten wir über benutzerdefinierte Felder arbeiten. Aber ich finde es mühsam bei jedem Post unzählige Klicks durchführen zu müssen. Daher werden wir uns jetzt eine eigene MetaBox für diesen Posttyp erstellen. Darin haben wir vier Eingabefelder für das Datum und die Zeit des von Start bzw. Ende des Events.

Die MetaBox definieren

Im ersten Schritt müssen wir die MetaBox selbst definieren und welche Felder wo angezeigt werden sollen. Dies erledigt die Funktion guru20_SetupMetaBox_Events() für uns. Dies ist unser Eingabeformular für den Post im Dashboard. Da wir nicht sehr viel benötigen, können wir es auch kurz halten.

Die MetaBox zum Dashboard hinzufügen

Der nächste Schritt ist die Funktion guru20_AddMetaBox_Events(). Sie fügt die Box im Dashboard ein und teilt WordPress mit, wie es damit und den darin enthaltenen Daten umzugehen hat.

Das Speichern der Daten der MetaBox

Die nun zu erstellende Funktion, übernimmt entweder das Speichern oder das Löschen der Daten, welche wir in der MetaBox erfasst haben. Sie erzeugt einen eigenen Datensatz in der Tabelle wp_postsmeta, welchen wir später verwenden können, wenn wir Daten neu anlegen. Ändern wir die Daten wird der bestehende Datensatz aktualisiert. Über die ID des Posts, wird der Datensatz zur Tabelle wp_posts in Relation gesetzt. Dadurch finden wir später, die passenden Metadaten zum jeweiligen Post.

Das Initialisieren der MetaBox

Wenn wir einen Post vom Typ events anzeigen, wollen wir natürlich eine leere MetaBox vor uns sehen. Dafür ist die folgende Funktion zuständig.

5. Das Anpassen der Liste der Events im Dashboard

Natürlich wollen wir die Events auch in einer praktischen Liste im Dashboard sehen. Genauso wie wir das bei den Posts bzw. Seiten gewohnt sind. Wir benötigen aber eine Liste mit dem Titel des Events, dem Beginn und dem Ende. Zuerst definieren wir in der folgenden Funktion, die passenden Spaltenköpfe.

Nun müssen wir auch die einzelnen Zeilen der Liste mit Daten befüllen. Dies erledigt die neu zu erstellende Funktion guru20_EventsColumns. Mit den Hooks, add_action() und add_filter(), welche am Ende des SourceCodes stehen, fügen wir diese Liste in unser Dashboard ein.

6. Der eigene Loop

Die Events im FrontEnd

Die Events im FrontEnd

Die Arbeiten am Dashboard haben wir jetzt abgeschlossen. Nun kannst Du bereits neue Posts des Typs events anlegen, löschen und verwalten. Damit wir diese Posts auch sehen, müssen wir uns auch um das FrontEnd kümmern. Da die benutzerdefinierten Posts nicht im Standard-Loop angezeigt werden, werden wir einen eigenen erstellen. Dies hat den Vorteil, dass diese Posts extra angezeigt werden können und nicht unter den anderen untergehen. Damit kannst Du sie vor den eigentlichen Posts, in der Seitenleiste oder auch im Kopf-/Fußbereich anzeigen.
Der ganze neue Loop sieht dann wie folgt dargestellt aus. Diesmal gebe ich Dir keinen Dateinamen vor. Denn wenn Du die Liste innerhalb des normalen Inhaltsbereichs haben willst, musst Du die Datei index.php oder loop.php verwenden. Soll diese Leiste aber in der Seitenleiste auftauchen, musst Du wahrscheinlich die Datei sidebar.php verändern.

7. Fazit

Nun sind wir am Ende dieses kleinen Tutorials angelangt und haben einen klitzekleinen Eventmanager erhalten. Du hast jetzt sicher genug Ideen, was Du mit eigenen benutzerdefinierten Posts anstellen oder diesen SourceCode noch erweitern kannst. Lass es mich doch wissen, was Du gemacht hast und schreib einen Kommentar.

Es wurden 2 Kommentare zu diesem Beitrag geschrieben.

  • Ruh

    Erstmal vielen dank für den super Artikel,

    hätte aber noch eine frage dazu, wie kann die Datums Auswahl bei den standart artikeln intigrieren und diese dann Nach diesem Datum sortieren?

    Hoffe ich habe mich verständlich ausgedrückt für rückfragen stehe ich natürlich jeder Zeit zur verfügung

    Lg Ruh

  • Frank

    Hallo,
    ziemlich gut, was Du Dir da ausgedacht hast. Habe aber bei “MetaBox fuer Events festlegen” das Problem, daß ich dort spätestens dann Schwierigkeiten bekomme, wenn der erste kleine php-Teil beendet wird (mit dem schließenden ?>). Ich habe nämlich eine einigermaßen umfangreiche functions.php, die an dieser Stelle überhaupt keinen html-code verträgt, bzw. geschlossen werden will. Daß man später wieder öffnet machts nicht besser. Was ich sagen will, der ganze Abschnitt:”MetaBox fuer Events festlegen” lässt sich nicht einbauen. Da streikt sofort die gesamte functions.php und es gibt nur noch noch weisse Seiten. Hättest Du dafür evtl. ne Lösung oder ne Idee dem beizukommen?

    Danke schonmal und Gruß
    Frank

Blogheim.at Logo
Diese Website verwendet Cookies - nähere Informationen dazu finden Sie in unserer „Datenschutzerklärung“. Klicken Sie auf „Ich stimme zu“, um Cookies zu akzeptieren und unsere Webseite zu besuchen, oder klicken Sie auf „Cookie-Einstellungen“, um Ihre Cookies selbst zu verwalten.