Kategorien
WordPress

Post Row Actions einer anderen Spalte zuordnen

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:

Screenshot eines meiner Blogbeiträge aus dem WordPress-Admin-Bereich. Die Bearbeitungsfunktionen unterhalb des Titels werden angezeigt.
Einer meiner Blogbeiträge mit den Bearbeitungsfunktionen.

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.

Hier klicken, um einen externen Inhalt anzuzeigen

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:

Screenshot eines meiner Blogbeiträge aus dem WordPress-Admin-Bereich. Die Bearbeitungsfunktionen sind nicht mehr unter dem Titel, sondern unterhalb des Autors.

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.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.