Leitfaden für benutzerdefinierte Tabellenspalten im WP Dashboard (admin columns)

Kürzlich war ich mit einem WP Projekt beschäftigt bei dem zusätzliche Daten wie Aufenthaltsbeginn und -ende, sowie durchgeführte Projekte zu erfassen waren.  Bisher hatte ich für benutzerdefinierte Felder die Erweiterung Custom Field Template von Hiroaki Miyashita eingesetzt. Das Plugin funktioniert zwar einwandfrei, jedoch rate ich davon ab, da es unzureichend dokumentiert ist. Aktualisierungen kommen zudem spartanisch und Anfragen im Support-Forum werden selten beantwortet. Für alle neuen Projekte mit benutzerdefinierten Feldern (custom fields) verwende ich die Erweiterung ACF (advanced custom fields). ACF ist zum einen gut dokumentiert und zum anderen auch für Personen geeignet, welche mit PHP nichts am Hut haben. Zudem gibt es eine Vielzahl von Erweiterungen, welche fast jeglichen möglichen Verwendungszweck abdecken. Da die Daten von benutzerdefinierten Feldern im Dashboard nicht automatisch angezeigt werden, beschreibe ich in diesem Leitfaden, wie man dies ändert.

Im Beispiel, welches ich hier zur Erläuterung verwende, sind unter custom post type ‘residency’ die Daten in den benutzerdefinierten Feldern ‘startdate’, ‘enddate’ und ‘projects’ gespeichert. An dieser Stelle gehe ich nicht darauf ein, wie custom post type zu erstellen ist. Mehr zu custom post type erfährt man im WP Codex. Um custom post type zu erstellen und zu verwalten, verwende ich selbst einfachheitshalber die Erweiterung Custom Post Type UI.

acf-resindeny
Bild: die benutzerdefinierten Felder ‘startdate’, ‘enddate’ und ‘project’ des custom post type ‘residency’

Hinzufügen von benutzerdefinierten Admin-Spalten

Wie beschrieben, möchte ich nun auch diese Felder in einer benutzerdefinierten Spalte im Administratorenbereich anzeigen lassen. Für alle die nichts mit Code zu tun haben wollen, gibt es zu diesem Zweck auch ein Plugin: Admin Columns, welches in der Pro Version auch die Funktion Sortierung und Filter beinhaltet. Für alle anderen, sind in der functions.php die gewünschten Spalten über den Filter ‘manage_residency_posts_columns’ hinzuzufügen.

Syntax der Funktion:

Damit werden drei Spalten mit den Überschriften ‘Residency starts’, ‘Residency ends’ und ‘Project(s)’ erzeugt. Die Funktion __ ( ) übernimmt die Übersetzung der Zeichenkette, falls die Übersetzung vorhanden ist.

 

Benutzerdefinierte Felder in den Admin-Spalten ausgeben

Nachdem nun die benutzerdefinierten Spalten hinzugefügt worden sind, sollen diese auch die gewünschten Daten anzeigen. Dafür verwenden wird den hook ‘manage_residency_posts_custom_column’. Die Argumente ‘10,2’ definieren, wie prioritär die action ausgeführt werden soll. Die 10 ist der Standardwert und die 2 definiert, wieviel Argumente erwartet werden.

Syntax der Funktion:

Die Daten der benutzerdefinierten Felder werden in diesem Beispiel mit der ACF Funktion get_field() ausgelesen. Die benutzerdefinierten Felder ‘startdate’ und ‘enddate’ basieren beide auf dem Date Picker Field und geben je einen timestamp zurück, der als Datum im Format ‘j.n.Y’ ausgegeben wird. Dafür wird die WP Funktion date_i18n verwendet.  Das Feld ‘project’ basiert auf dem Relationship Field und gibt in einem Array die Links und Titel der Projekte zurück. Damit werden nun in zuvor generierten Spalten die Daten der benutzerdefinierten Felder ausgegeben.

admin-list2
Bild: die benutzerdefinierten Spalten werden nun im Dashboard mit den entsprechenden Daten ausgegeben.

 

Benutzerdefinierte Admin-Spalten sortierbar machen

Was zusätzlich hilfreich wäre, wenn sich die Daten in den hinzugefügten Spalten sortieren liessen. In unserem Beispiel machen wir die Spalten Residency starts ‘startdate’ und Residency ends ‘enddate’ sortierbar. Aus diesem Grund fügen wir einen weiteren Filter der functions.php hinzu.

Syntax der Funktion:

Damit können nun die custom posts nach den Werten in den Spalten von Residency starts ‘startdate’ und Residency ends ‘enddate’ sortiert werden.

admin-list-sort

Bild: Die custom posts können nun nach Residency starts ‘startdate’ und Residency ends ‘enddate’ in der gewüschten Reihenfolge desc/asc sortiert werden. Beim Überfahren der Spaltenüberschrift erscheint dazu ein Pfeildreieck.

Wer nun die Sortierung der custom posts noch standardmässig festlegen will, den verweise ich auf den Blogeintrag von Remi Corson: Modifying the current query with pre_get_posts.
Ein weiterführender Leitfaden von William Tam zu den benutzerdefinierten Admin-Spalten findet sich unter: A Guide to Custom WordPress Admin Columns