Anpassen von WordPress-Verwaltungstabellen: Erste Schritte

Veröffentlicht: 2021-01-25

Jeder, der WordPress verwendet, wird mit den WordPress-Admin-Tabellen vertraut sein, die in allen zentralen Übersichtsbereichen wie Seiten und Beiträgen erscheinen. Das gleiche Format wird für diese Art von Tabellen in WordPress verwendet, was bedeutet, dass Sie schnell mit der Verwendung dieser Tabellen vertraut werden. Aber wussten Sie, dass Sie die WordPress-Verwaltungstabellen ändern und die angezeigten Informationen ändern oder Ihre eigenen zusätzlichen Spalten hinzufügen können?

In diesem Artikel erklären wir Ihnen, wie Sie dies tun können. Lass uns anfangen!

Die Haken

Um die Daten der Admin-Tabellen anzuzeigen, erweitert WordPress die eingebaute Klasse WP_List_Table . Die Klasse WP_List_Table wird als private Klasse in der Datei wp-admin/includes/class-wp-list-table.php . Private Klassen werden als privat bezeichnet, da sie nur für die Verwendung durch andere Kernklassen und -funktionen und nicht für Entwickler vorgesehen sind.

WordPress bietet Ihnen die Möglichkeit, Admin-Tabellen zu ändern. Um die Tabellenspalten zu manipulieren, müssen Sie einen der Filter-Hooks verwenden, die WordPress in der Datei wp-admin/includes/class-wp-posts-list-table.php .

In dieser Datei erweitert die WP_Posts_List_Table Klasse die WP_List_Table Klasse und definiert ihre Eigenschaften und Methoden neu, um die Admin-Tabellen entsprechend ihrem Beitragstyp zu füllen. Sie können den Hook manage_posts_columns für die Beitragstabelle, manage_pages_columns für die Seiten und manage_{$post_type}_posts_columns , wenn Sie die Spalten einer benutzerdefinierten Beitragstyptabelle bearbeiten möchten.

In dieser Datei werden auch die Spalten beschrieben, die standardmäßig für die Tabellendaten verwendet werden. Um Zeile 616 herum wird das Array $posts_columns eingeführt und die folgenden Spalten werden hinzugefügt:

  • Die Kontrollkästchen-Spalte „cb“ für Massenaktionen
  • Die Spalte „Titel“ des Beitrags
  • Die Spalte „Autor“ für den Autor des Beitrags
  • Die Spalte „Kategorien“ für die Kategorien, zu denen der Beitrag gehört
  • Die Spalte „Tags“ des Beitrags
  • Die Spalte „Kommentare“.
  • Die veröffentlichte Spalte „Datum“.

Hinzufügen einer benutzerdefinierten Spalte zu den Admin-Tabellen

Das Hinzufügen einer benutzerdefinierten Spalte zu einer Tabelle ist etwas, das Entwickler häufig tun müssen. Darüber hinaus ist es auch sehr praktisch, Ihre Spalten sortieren zu können, wenn Sie Inhalte organisieren. Wir zeigen, wie eine benutzerdefinierte Spalte für Beiträge, Seiten und benutzerdefinierte Beitragstypen implementiert wird und wie wir diese benutzerdefinierten Spalten sortierbar machen können.

Die Beitragslistentabellen

Sehen wir uns als Beispiel an, wie wir eine Spalte hinzufügen könnten, die beschreibt, wann ein Beitrag zuletzt geändert wurde. Dies kann eine wirklich nützliche Funktion sein, insbesondere wenn Sie einen Blog mit vielen Beiträgen betreiben und überprüfen möchten, wann jeder zuletzt aktualisiert wurde. Mal sehen, wie das umgesetzt werden kann.

Zunächst müssen wir den Namen der neuen Spalte zum Array der Spaltenkopfnamen hinzufügen. Schauen wir uns Zeile 663 der Datei class-wp-posts-list-table.php an.

 if ( 'page' === $post_type ) { $posts_columns = apply_filters( 'manage_pages_columns', $posts_columns ); } else { $posts_columns = apply_filters( 'manage_posts_columns', $posts_columns, $post_type ); }

In diesem Teil des Codes ist klar, dass wir den Filter manage_posts_columns verwenden sollten (weitere Informationen dazu finden Sie hier), da wir die Änderungen an der Posts-Listentabelle vornehmen möchten. Um den Namen der Spalte zum Array der Spaltenüberschriften hinzuzufügen, bearbeiten wir die Datei functions.php unseres aktiven Designs und fügen diesen Code ein:

 add_filter('manage_posts_columns','add_custom_columns'); function add_custom_columns( $columns ) { $columns['last_modified'] = 'Last modified'; return $columns; }

Wenn wir jetzt die Seite mit der Liste der Admin-Beiträge aktualisieren, können wir die zusätzliche Spalte sehen. Zu diesem Zeitpunkt enthält diese Spalte keine Daten.

Grundlegende Anpassung der WordPress-Admin-Tabellen

In unserem nächsten Schritt müssen wir WordPress mitteilen, welche Inhalte in der Spalte angezeigt werden. Dazu verwenden wir die Aktion manage_posts_columns , die Teil der öffentlichen Funktion column_default ist, die für die Spaltenausgabe verantwortlich ist. Diese Aktion bezieht sich nur auf Post-Typen, die nicht hierarchisch sind, wie z. B. Posts, und Sie können sie in Zeile 1258 erkennen.

Was wir hier tatsächlich tun werden, um den Inhalt zu füllen, ist eine switch-Anweisung für alle benutzerdefinierten Spalten auszuführen, und da der Header-Name „last_modified“ ist (wie wir ihn in unserem ersten Schritt oben registriert haben), geben wir unseren Inhalt wieder. Um den Inhalt wiederzugeben, verwenden wir die in WordPress integrierte get_post_field -Funktion und geben das gewünschte Feld zurück, das eine beliebige Spalte aus der wp_posts Tabelle in der Datenbank sein kann. Im Fehlerfall wird eine leere Zeichenfolge zurückgegeben.

In der Datei functions.php fügen wir also den folgenden Code hinzu:

 add_action( 'manage_posts_custom_column','custom_columns_content', 10, 2 ); function custom_columns_content ( $column_id, $post_id ) { switch( $column_id ) { case 'last_modified': echo get_post_field('post_modified', $post_id); break; } }

Sie können bestätigen, dass dies wie erwartet funktioniert, indem Sie die Seite erneut aktualisieren.

Beachten Sie, dass der Wert „Zuletzt geändert“ für den zweiten Beitrag, der nach seiner ersten Veröffentlichung nie geändert wurde, mit dem Veröffentlichungsdatum identisch ist.

Die Seitenlistentabelle

Um dasselbe in der Seitenlistentabelle zu tun, fügen wir den Namen der Spalte auf die gleiche Weise zum Array der Spaltenkopfnamen hinzu. Der Unterschied besteht diesmal darin, dass wir den Hook manage_pages_columns wie unten gezeigt verwenden:

 add_filter('manage_pages_columns','add_custom_page_columns'); function add_custom_page_columns( $columns ) { $columns['last_modified'] = 'Last modified'; return $columns; }

Als Nächstes fügen wir den Inhalt mit dem Hook manage_pages_custom_column anstelle von manage_posts_custom_column , den wir zuvor verwendet haben.

 add_action( 'manage_pages_custom_column','custom_columns_content', 10, 2 ); function custom_columns_content ( $column_id, $post_id ) { switch( $column_id ) { case 'last_modified': echo get_post_field('post_modified', $post_id); break; } }

Nachdem wir den obigen Code in unsere functions.php -Datei eingefügt haben, können wir bestätigen, dass die Dinge wie erwartet funktionieren, indem wir die Pages Admin-Tabelle in unserem Admin-Bereich besuchen, wo wir jetzt eine Spalte „Zuletzt geändert“ sehen sollten.

Die Tabelle für benutzerdefinierte Beitragstypen

Wir erstellen zunächst einen benutzerdefinierten Beitragstyp, indem wir den folgenden Code in unsere Datei functions.php einfügen:

 function my_custom_post_type() { register_post_type( 'mycpt', array( 'labels' => array( 'name' => __( 'Custom Post Types' ), 'singular_name' => __( 'Custom Post Type' ) ), 'public' => true, 'has_archive' => true, 'rewrite' => array('slug' => 'mycpt'), 'show_in_rest' => true, ) ); } add_action( 'init', 'my_custom_post_type' );

In unserem Admin-Menü werden wir feststellen, dass ein neues Element namens „Benutzerdefinierter Beitragstyp“ hinzugefügt wurde.

Wenn Sie nicht wissen, wie benutzerdefinierte Beitragstypen erstellt werden, und mehr erfahren möchten, können Sie unseren verwandten Artikel zum Erstellen benutzerdefinierter Beitragstypen lesen.

Jetzt haben wir unser benutzerdefiniertes Beitragstyp-Setup und werden mit dem Hinzufügen unserer neuen Spaltenüberschrift mit ihrem Inhalt fortfahren. Wie bereits erwähnt, müssen wir im Falle eines CPT (Custom Post Type) die manage_{$post_type}_posts_columns , um unsere benutzerdefinierte Spalte hinzuzufügen.

Der {$post_type} muss identisch mit dem ersten Argument der Funktion register_post_type() sein, das in diesem Fall 'mycpt' ist.

Der Code, den wir in der Datei functions.php verwenden, um unsere Spaltenüberschrift hinzuzufügen, sieht also wie folgt aus:

 add_filter( 'manage_mycpt_posts_columns','add_mycpt_custom_columns'); function add_mycpt_custom_columns( $columns ) { $columns['last_modified'] = 'Last modified'; return $columns; }

Und um den Spalteninhalt zu füllen:

 add_action( 'manage_mycpt_posts_custom_column','fill_mycpt_posts_custom_column'); function fill_mycpt_posts_custom_column( $column_id, $post_id ) { switch( $column_id ) { case 'last_modified': echo get_post_field('post_modified', $post_id); break; } }

Die Ergebnisse sollten in etwa so aussehen:

Spalten sortierbar machen

Um die Spalte sortierbar zu machen, müssen wir definieren, welche benutzerdefinierten Spalten sortiert werden dürfen. Dazu verwenden wir den manage_edit-{post-type}_sortable_columns mit einer Callback-Funktion.

Also werden wir in jedem Beitragstyp denselben Code anhängen (natürlich mit eindeutigen Funktionsnamen).

Für Beiträge:

 add_filter( 'manage_edit-post_sortable_columns', 'sortable_post_columns' ); function sortable_post_columns( $columns ) { $columns['last_modified'] = 'Last modified'; return $columns; }

Für Seiten:

 add_filter( 'manage_edit-page_sortable_columns', 'sortable_page_columns' ); function sortable_page_columns( $columns ) { $columns['last_modified'] = 'Last modified'; return $columns; }

Für unseren benutzerdefinierten Beitragstyp (mycpt):

 add_filter( 'manage_edit-mycpt_sortable_columns', 'sortable_mycpt_posts_columns' ); function sortable_mycpt_posts_columns( $columns ) { $columns['last_modified'] = 'Last modified'; return $columns; }

Wenn Sie nun eine Ihrer Admin-Tabellen besuchen, sollten Sie sehen, dass die Überschrift der benutzerdefinierten Spalte als Link angezeigt wird. Wenn Sie darauf klicken, sollte es nach dem Änderungsdatum sortiert werden.

Deaktivieren Sie die Sortierung für Spalten

Um die Sortierfunktion für eine Spalte zu entfernen, müssen wir sie nur aus dem Array entfernen. Wenn wir dies beispielsweise für die Spalte „Datum“ tun möchten, würden wir eine zusätzliche Codezeile unset($columns['date']) hinzufügen. Das würde so aussehen:

Für Beiträge:

 add_filter( 'manage_edit-post_sortable_columns', 'sortable_post_columns' ); function sortable_post_columns( $columns ) { $columns['last_modified'] = 'Last modified'; unset($columns['date']); return $columns; }

Für Seiten:

 add_filter( 'manage_edit-page_sortable_columns', 'sortable_page_columns' ); function sortable_page_columns( $columns ) { $columns['last_modified'] = 'Last modified'; unset($columns['date']); return $columns; }

Für unseren benutzerdefinierten Beitragstyp (mycpt):

 add_filter( 'manage_edit-mycpt_sortable_columns', 'sortable_mycpt_posts_columns' ); function sortable_mycpt_posts_columns( $columns ) { $columns['last_modified'] = 'Last modified'; unset($columns['date']); return $columns; }

Wenn Sie jetzt die entsprechende Tabelle besuchen, werden Sie feststellen, dass die Datumsbezeichnung nicht mehr anklickbar ist (und daher diese Spalte nicht mehr sortierbar ist).

An dieser Stelle lohnt es sich, auf ein Detail hinzuweisen, das die WordPress-Entwickler oft verwirrt. Werfen Sie einen Blick auf die folgende Tabelle, die die Hooks zeigt, die wir für Beiträge, Seiten und benutzerdefinierte Beiträge verwendet haben.

WordPress-Admin-Tabellen-Hooks

Sie haben vielleicht bemerkt, dass die Haken, die wir zum Sortieren von Spalten verwenden, nicht wirklich dem Muster folgen. Sie würden erwarten, dass sie manage_posts_sortable_columns , manage_pages_sortable_columns bzw. manage_mycpt_posts_sortable_columns sind. Leider ist dies nur eine Frage der schlechten Namensgebung. Es ist dennoch sehr hilfreich, eine zusammenfassende Tabelle wie diese als einfache Erinnerung zu führen.

Ändern der Spaltenbreite

Um die Breite einer Spalte anzupassen, verwenden wir den Aktions-Hook admin_head , den WordPress bereitstellt und im Head-Bereich für alle Admin-Seiten ausführt, die CSS oder JS enthalten.

Versuchen Sie als Beispiel, den folgenden Code in die Datei functions.php einzugeben:

 add_action('admin_head', 'my_column_width'); function my_column_width() { echo '<style type="text/css">'; echo '.table-view-list.posts .column-title { width:120px !important; overflow:hidden }'; echo '</style>'; }

Hier haben wir die .column-title Klasse der Titelspalte, die für alle Admin-Tabellen gleich ist, und die .table-view-list.posts Klassen verwendet. Kombiniert stellen diese sicher, dass das CSS nur in der Beitragslistentabelle angewendet wird.

Um dasselbe für unsere anderen Admin-Bildschirme (z. B. Seiten) zu erreichen, verwenden wir stattdessen table-view-list.pages .

Fazit

Es gibt viele Möglichkeiten, die Spalten der WordPress Admin Tables zu manipulieren. In zukünftigen Artikeln werden wir einige weitere Beispiele durchgehen und einige nützliche Tricks vorstellen, mit denen Sie mehr aus Ihren Admin-Tabellen herausholen können!