Quick-Tipp: Benutzer nach Anzahl der Beiträge sortieren

Seit WordPress3.1 lassen sich einige Tabellen im Backend durch einen Klick auf die Spaltenüberschrift sortieren. Auf der Benutzer-Seite lassen sich so z.B. die Benutzer nach Name, E-Mail oder Benutzername sortieren.
Wer ein Blog mit vielen Autoren betreibt, möchte vielleicht auch mal die Benutzer nach Anzahl der geschriebenen Beiträge sortieren lassen. Dies ist jedoch nicht möglich, da nur die ersten drei Spalten sortierbar sind. Mit ein paar Zeilen PHP kann man dies jedoch ändern.

Dazu filtern wir das Array mit den sortierbaren Spalten und fügen den Spalten-Schlüssel ‘posts‘ hinzu. Den Spalten-Schlüssel finden wir in den Core-Dateien, genauer gesagt in der Klasse WP_Users_List_Table (wp-admin/includes/class-wp-list-users-table.php; Zeile 160 – 174) (direkt da drunter finden wir dann übrigens auch gleich die sortierbaren Spalten).
Der Name des benötigten Filters setzt sich aus einem Muster und den Screennamen zusammen: manage_xxx_sortable_columns. xxx ist dabei durch den Screennamen zu ersetzen. Dies funktioniert auch mit anderen Seiten im Backend, sofern dort eine Tabelle mit WP_List_Table erstellt wurde. Dazu ein anderes mal mehr.

Der Wert für den entsprechenden Eintrag im Array kann entweder ein String oder ein Array sein. Übergibt man lediglich einen String, so legt man nur fest wonach sortiert werden soll. In diesen Fall wird dann die Standardsortierung asc (Ascending = Aufsteigend) verwendet. Möchte man eine absteigende Reihenfolge (desc = Descending = Absteigend), so muss man anstatt eines String ein Array übergeben. Der erste Wert im Array ist dabei der Schlüssel nach dem sortiert werden soll und der zweite Wert die Reihenfolge (asc/desc).
In unseren Fall ist es ganz sinnvoll absteigend zu sortieren damit die Benutzer mit den meisten Beiträge als erstes aufgelistet werden. Wir übergeben also ein Array. Da wir nach Anzahl der Beiträge sortieren wollen, ist der erste Wert demnach ‘post_count‘ und der zweite Wert ‘desc‘.

Das modifizierte Array mit return zurück geben und schon sind wir fertig. Im großen und Ganzen ist das alles eine recht interessante Sache da man auch Spalten hinzufügen bzw. entfernen kann. Dieser Code-Schnipsel ist lediglich ein kleiner Einstieg, ich werde demnächst noch etwas zu den Thema “Spalten in Tabellen” schreiben. Hier noch das komplette Plugin (wer es nicht als Plugin haben will, kopiert sich den Filter und die Funktion in die functions.php. Mit PHP5.3 ist das übrigens alles sehr kompakt und ein schöner Fall für eine anonyme Funktion).

<?php
/*
Plugin Name: Sortable post column
Description: Make posts column on users screen sortable
Version: 0.0.1
Author: Ralf Albert
Author URI: http://yoda.neun12.de
*/

// make posts-column sortable
add_filter( 'manage_users_sortable_columns', 'register_user_post_column_sortable' );

function register_user_post_column_sortable( $columns ){
$columns['posts'] = array( 'post_count', 'desc' );
return $columns;
}

/* PHP5.3 style */
/*
add_filter( 'manage_users_sortable_columns',
function( $columns ){
$columns['posts'] = array( 'post_count', 'desc' );
return $columns;
}
);
*/