Heute gibt es mal wieder einen technischen Beitrag von mir mit einem kleinen „Hack“. Dieser ist vermutlich ein super seltener Anwendungsfall, aber da es tatsächlich einen Hook dafür gibt, lässt sich das ohne großen Programmieraufwand umsetzen.
Es geht um die „Post Row Actions“, also die Links, welche auf der Beitragsübersicht erscheinen, wenn man mit der Maus über die entsprechende Zeile fährt:
Normalerweise erscheinen diese Links unterhalb des Beitrags-/Seitentitels. Nun war meine Anforderung, diese Links für einen bestimmten Custom Post Type in einer anderen Spalte anzuzeigen.
Kann das mit Bordmitteln in WordPress erledigt werden?
Ja, das geht tatsächlich über einen Hook in WordPress. Dieser heißt list_table_primary_column
und definiert, wie der Name bereits vermuten lässt, die „Hauptspalte“ in der Beitragstabelle.
Als erstes definiere ich den Filter-Aufruf mit add_filter
:
add_filter( 'list_table_primary_column', array( $this, 'change_primary_column' ), 10, 2 );
Da ich mit Klassen gearbeitet habe, ist der Aufruf der Funktion nicht nur der Funktionsname selbst, sondern wird in ein array
gepackt, dessen erster Parameter die Variable $this
ist. Wer ohne Klassen in PHP arbeitet, der schreibt statt dem Array einfach nur den Funktionsnamen 'change_primary_column'
hin.
Dann folgt auch schon die dazugehörige Funktion, in der die Magie passiert:
public function change_primary_column( $default, $screen ) { // Only do this for a specific post type, otherwise all post types will be affected if ( 'edit-MYCPT' === $screen ) { $default = 'NEW_DEFAULT_COLUMN'; } return $default; }
Im Snippet oben habe ich die Stellen mit Großbuchstaben markiert, die angepasst werden müssen. Wer nicht mit Klassen arbeitet, der muss das public
ebenfalls entfernen.
Da der Hook für alle Post Types gilt, ist darauf zu achten, dass diese Änderung tatsächlich nur für den einen Custom Post Type ausgeführt wird. Mit der If-Abfrage wird geprüft, ob gerade der richtige Post Type angezeigt wird. Wer das für sich anpassen möchte, muss lediglich statt MYCPT
den Slug des eigenen Custom Post Types ersetzen. Wichtig ist, dass das edit-
vorne stehen bleibt.
Innerhalb der If-Abfrage wird dann der Variable $default
der Slug der Spalte zugewiesen, wo die Links erscheinen sollen. Hier muss also das NEW_DEFAULT_COLUMN
ersetzt werden.
Das Ergebnis als Beispiel in meinem Blog
Ich habe das Snippet mal bei mir im Blog eingefügt, so sieht es dann aus, wenn als Post Type post
und als Spalte author
eingefügt wurde:
In der Regel sollte sowas eigentlich nicht nötig sein, aber ich hatte den speziellen Anwendungsfall und nach einiger Recherche auch die relativ unkomplizierte Lösung gefunden. Vielleicht ist dieser Beitrag aber für den ein oder anderen hilfreich, der mit stark angepassten Custom Post Types arbeitet.