Selbstgestrickt

WordPress Custom Content Types

Lange Zeit kannte WordPress nur die Inhaltstypen Blogbeitrag (Post) und Seite (Page). Seit WordPress 3.0 können Sie Word- Press mit eigenen Inhaltstypen, sogenannten Custom Post Types (CPT) aufbohren. In diesem Workshop lernen Sie die neuen Techniken am Beispiel einer Bestseller-Liste kennen, wie sie das Blog eines Bücherfans zeigen könnte.

image.jpg

© Internet Magazin

In Verbindung mit den in Version 2.8 eingeführten, individuellen Taxonomien (Custom Taxonomies) wird WordPress zu einem mächtigen Content-Management-System, das nahezu beliebige Inhalte verwaltet.

Die Bestseller-Listen realisieren wir in Form eines WordPress-Plugins. Geplant sind zwei verschiedene Listen für Bestseller und Belletristik. Zu jeder Liste gehören zehn Bücher. Für jedes Buch soll WordPress neben dem Titel auch den Autor, die ISBN und die Platzierung innerhalb der Liste verwalten.Anhand dieser Informationen generiert WordPress automatisch Links, über die man jedes Werk in einem Bücher-Onlineshop bestellen kann.

Voraussetzungen

Um den Workshop erfolgreich zu absolvieren, sollten Sie über Erfahrung im Umgang mit PHP und MySQL verfügen. Installieren Sie WordPress in der aktuellen Version 3.01 und aktivieren Sie das Standard-Theme Twentyten. Laden Sie die ZIP-Datei mit dem Beispielcode von bit.ly/cOY8Xk herunter. Packen Sie das ZIP-Archiv aus und verschieben Sie die darin enthaltene Datei in den Unterordner wp-content/plugins/ Ihrer WordPress- Installation. Aktivieren Sie das Plugin über die Plugin-Verwaltung von WP-Admin.

Custom Post Type registrieren

Wenn man einen eigenen CPT in WordPress anlegt, empfiehlt es sich, dessen Namen mit einem individuellen Präfix zu versehen. So vermeiden Sie Überschneidungen mit Bezeichnungen, die WordPress selbst oder andere Plugin-Autoren verwenden. In unserem Beispiel verwenden wir das Kürzel tq_, das heißt, der CPT heißt tq_bestseller.Öffnen Sie die Beispiel-Datei bestseller.php in einem Texteditor. An deren Anfang finden Sie die Funktion post_type_tq_bestseller(). Diese wird über add_action() bei der WordPress-Initialisierung aufgerufen und schiebt ihrerseits WordPress den CPT tq_bestseller unter. Dazu verwendet sie

register_post_type( "tq_bestseller",
$args )

in Zeile 43. Das Array $args wird in den Zeilen 16 bis 41 mit den Parametern befüllt, die den CPT beschreiben. Die Parameter sind vollständig im WordPress-Codex unter bit.ly/aXNkEw dokumentiert.

image.jpg

© Internet Magazin

Ohne benutzerdefinierte Spalten gestaltet sich die Bearbeitung der Bestseller knifflig.

So setzen Sie zum Beispiel über label die Bezeichnung, unter der der CPT in WP-Admin erscheint, in unserem Fall "Bestseller". labels enthält ein Array mit weiteren Bezeichnungen für WP-Admin, darunter zum Beispiel edit_item mit dem Wert "Bestseller bearbeiten". Der Parameter hierarchical kann wahr oder falsch sein.Ist er wahr, dann gleichen Einträge vom Typ des CPT konventionellen WordPress-Pages, die sich einander hierarchisch über- oder unterordnen lassen. Für tq_bestseller setzen wir hierarchical auf falsch, sodass unser CPT die flache Struktur der WordPress-Posts erbt. Interessant ist auch das Array, das für den Parameter supports übergeben wird. Es enthält eine Auflistung der Felder, die WordPress-Posts für Posts vorsieht, und die auch für den CPT aktiviert werden sollen. In unserem Beispiel ist das nur das Feld Title.

Custom Taxonomies

Es bietet sich an, den Buchtypen ("Sachbuch", "Belletristik") und den Verfasser in Form von Schlagworten zu speichern und dafür WordPress Custom Taxonomies (CT) zu verwenden. So kann man zum Beispiel alle Bücher desselben Autors unter einer entsprechenden URL aufrufen.In den Zeilen 45 und 46 der bestseller.php leeren wir die Arrays $labels und $args, bevor wir sie in den Zeilen 48 bis 73 verwenden, um die CT tq_verfasser für den CPT tq_bestseller zu registrieren. Die Vorgehensweise entspricht dabei genau der bei der Registrierung eines CPT, nur die der Funktion übergebenen Parameter weichen ab. So wird eine CT zum Beispiel explizit für einen CPT definiert. Welche Parameter register_taxonomy() versteht, lesen Sie unter bit.ly/8TJBza. In den Zeilen 78 bis 104 kommt die CT tq_buchtyp hinzu.

Benutzerdefinierte Felder

Für jedes Buch muss auch eine ISBN und eine Platzierung innerhalb der Bestsellerliste gespeichert werden. Dafür nutzen wir Word- Press benutzerdefinierte Felder, "Custom Fields" genannt. Die soll der Redakteur aber nicht selbst per WP-Admin anlegen müssen. Vielmehr verbiegen wir WordPress so, dass tatsächlich zwei Eingabefelder namens "ISBN" und "Platzierung" in WP-Admin erscheinen, sobald ein Bestseller angelegt oder verändert wird. Sehen Sie sich jetzt die Zeilen 112 bis 155 an. In Zeile 146

add_action("admin_init",
"admin_init");

greifen wir über den WordPress-API-Hook admin_init in WP-Admin ein. Was genau dabei passiert, ist in den Zeilen 112 bis 144 definiert: Die Funktion admin_init() ruft ihrerseits zweimal add_meta_box() auf, um die Felder meta_isbn und meta_platzierung in WP-Admin zu integrieren. add_meta_ box() ist im WordPress-Codex unter bit.ly/VNCZB dokumentiert.

image.jpg

© Internet Magazin

Für ISBN und Platzierung zeigt WordPress dank unseres Plugins eigene Eingabefelder an.

Entscheidend an diesem Funktionsaufruf ist, dass WordPress über den Parameter callback die Funktionen meta_isbn() und meta_platzierung kennenlernt, die das für die Anzeige der Felder in WP-Admin notwendige HTML generieren. Die beiden Funktionen (Zeile 120 bis 144) sorgen auch dafür, dass bei der Bearbeitung eines bereits in der WordPress-Datenbank vorhandenen Eintrags die Werte für ISBN und Platzierung ausgelesen und angezeigt werden.Ergänzt werden meta_isbn() und meta_platzierung() durch die Funktion save_details() (Zeile 148 bis 153). Sie wird dank des WordPress-API-Hook save_post() beim Speichern aufgerufen und schiebt die in meta_isbn und meta_platzierung enthaltenen Werte in der Datenbank.

Spalten und Anzeige

Ruft der Redakteur in WP-Admin eine Übersicht der Bestseller auf, sieht er in der Standardansicht nur den Titel der Bücher sowie den Namen des Redakteurs, der den Bestseller in WordPress eingetragen hat. Auch die Reihenfolge der Einträge ist sehr unübersichtlich. Doch auch diese Ansicht lässt sich anpassen. Den dafür zuständigen Code finden Sie in den Zeilen 157 bis 204.Die Funktion my_tq_bestseller_columns() organisiert die Beschriftung des Spaltenkopfes. Beim Aufruf gibt sie das mit Werten wie "Buchtitel" und "Verfasser" gefüllte Array $columns zurück. Ihr zur Seite steht die Funktion my_custom_columns(). Sie wird für jeden einzelnen Titel aufgerufen und bringt dessen Verfasser, Buchtyp und Platzierung zur Anzeige.Nun wollen wir die Bestseller-Übersicht sortieren, primär nach Buchtyp und sekundär nach Platzierung. Das erledigt die Funktion my_post_request_filter($input) (Zeile 184 ff.). Sie wird immer dann aufgerufen, wenn WP-Admin eine Beitragsübersicht anzeigt. Wir überprüfen in Zeile 186 zunächst, ob es sich bei der angezeigten Übersicht um die Bestseller-Liste handelt.Beim Aufruf von my_post_request_filter($input) übergibt WordPress der Funktion das SQL Statement, mit dem es die anzuzeigenden Beiträge aus der Datenbank fischen will. Bevor wir das Statement an WordPress zurückgeben, verändern wir es so, dass MySQL die tq_bestseller- Beiträge später in der gewünschten Reihenfolge liefern wird. Um die Änderungen am SQL Statement zu erleichtern, verwenden wir die Funktion sqladd().Fehlt noch die Ausgabe der Bestseller- Listen im Blog selbst. Sie lässt sich per WordPress-Loop erledigen. In unserem Fall soll die Liste allerdings neben den Blog- Beiträgen erscheinen, sodass wir sie ohne Zuhilfenahme von WordPress-Funktionen anzeigen.Dazu haben wir die Funktion tq_get_bestsellerliste($buchtyp) (Zeile 207 ff.) geschrieben. Deren Kern ist ein komplexes SQL Statement, das genau die Infos aus der Datenbank holt, die wir für das HTML der Bestsellerliste benötigen. Es empfiehlt sich, Statements dieser Länge in einem SQL-Editor vorzubereiten, wie ihn beispielsweise Navicat for MySQL bietet.

Mehr zum Thema

Youtube Sperre umgehen GEMA
Videos freischalten

So umgehen Sie die GEMA-Sperre bei Youtube. Was Sie dazu brauchen, und wie es am einfachsten geht.
Neue Fritzboxen unterstützen den AC-Standard.
WLAN-Geschwindigkeit verdoppeln

Mehr WLAN-Geschwindigkeit: Mit dem WLAN-Standard 802.11ac und den richtigen Geräten und Einstellungen verdoppeln Sie den Datendurchsatz.
Netflix auf dem TV
Programm in der Übersicht

Welche Filme und Serien gibt es bei Netflix eigentlich zu sehen? Was ist neu im Streaming-Angebot? Diese Antworten helfen weiter.
Netflix
Streaming

Preise, kompatible Geräte, Datenrate, Serien- und Filmangebot von Netflix: Wir beantworten die wichtigsten Fragen rund um den Streaming-Dienst.
E.T. – Der Außerirdische
Vorschau auf Film- und Serien-Highlights

Amazon Prime Instant Video lockt im Dezember 2016 mit Film-Highlights wie "E.T.", "Fast & Furious 7" und der Serie "Ku’damm 56​".