Angenommen, ich habe die Frage verstanden, müssen Sie sich in die beiden Hooks einbinden, die sich auf Spaltenüberschriften und Spaltenwerte für die Verwaltungsseiten des Administrators beziehen. Sie sind 'manage_{$type}_columns'
und 'manage_{$type}_custom_column'
wo in Ihrem Anwendungsfall {$type}
ist users
.
Der 'manage_users_columns'
Haken
Diese erste ist einfach. Sie können die Spaltenüberschriften und damit die verfügbaren Spalten angeben. WordPress codiert den Wert der Spalte "Posts" fest. Da Sie ihn also ändern möchten, entfernen wir ihn einfach mit unset()
und fügen dann eine neue Spalte mit demselben Titel hinzu, die jedoch den folgenden Bezeichner hat 'custom_posts'
:
add_action('manage_users_columns','yoursite_manage_users_columns');
function yoursite_manage_users_columns($column_headers) {
unset($column_headers['posts']);
$column_headers['custom_posts'] = 'Posts';
return $column_headers;
}
Der 'manage_users_custom_column'
Haken
Als nächstes müssen Sie den 'manage_users_custom_column'
Hook verwenden, der nur für nicht standardmäßige Spalten aufgerufen wird. Wir testen $column_name=='custom_posts'
, ob unser Code robust ist, falls wir in Zukunft neue Benutzerspalten hinzufügen, und ermitteln dann die Anzahl der Benutzerbeitragstypen aus der von mir geschriebenen Funktion, _yoursite_get_author_post_type_counts()
die ich im Folgenden erläutern werde. Ich habe dann mit ein paar Möglichkeiten gespielt, dies zu formatieren, aber entschieden, dass ein HTML <table>
am besten geeignet ist (da es sich um eine Datentabelle handelt) . Wenn eine Tabelle für Sie nicht funktioniert, können Sie vermutlich ganz einfach andere Markups generieren:
add_action('manage_users_custom_column','yoursite_manage_users_custom_column',10,3);
function yoursite_manage_users_custom_column($custom_column,$column_name,$user_id) {
if ($column_name=='custom_posts') {
$counts = _yoursite_get_author_post_type_counts();
$custom_column = array();
if (isset($counts[$user_id]) && is_array($counts[$user_id]))
foreach($counts[$user_id] as $count)
$custom_column[] = "\t<tr><th>{$count['label']}</th>" .
"<td>{$count['count']}</td></tr>";
$custom_column = implode("\n",$custom_column);
}
if (empty($custom_column))
$custom_column = "No Posts!";
else
$custom_column = "<table>\n{$custom_column}\n</table>";
return $custom_column;
}
Abrufen der Anzahl der Beiträge nach Beitragstyp für jeden Benutzer / Autor
Zuletzt werden die Anzahl der Beiträge nach Beitragstyp nach Autor / Benutzer abgerufen. Im Allgemeinen versuche ich, WP_Query()
bei der Ausführung von Abfragen für Posts bei der Verwendung zu bleiben , aber für diese Abfrage wären so viele andere Hooks erforderlich gewesen, dass es einfach einfacher schien, "ungezogen" zu sein und alles in einem zu tun.
Ich habe jeden Beitrag von $post->post_type
is weggelassen 'revision'
oder bin dabei 'nav_menu_item'
geblieben 'attachments'
. Möglicherweise ist es besser, die gewünschten Beitragstypen explizit einzuschließen, als die wenigen, die ich getan habe, auszuschließen.
Ich habe auch $post->post_status
nur nach 'publish'
und gefiltert 'pending'
. Wenn Sie auch enthalten sein sollen 'future'
, 'private'
und / oder 'draft'
Sie die Änderungen im Code vornehmen müssen.
Bei jedem Seitenaufruf rufe ich diese _yoursite_get_author_post_type_counts()
Funktion nur einmal auf und speichere sie dann in einer statischen Variablen, anstatt sie für jeden Benutzer aufzurufen. Ich speichere in einem Array, das durch Autoren- / Benutzer-IDs indiziert ist und ein Array mit dem Post-Post-Namen im Element 'label'
und natürlich der Anzahl in einem gleichnamigen Element enthält:
function _yoursite_get_author_post_type_counts() {
static $counts;
if (!isset($counts)) {
global $wpdb;
global $wp_post_types;
$sql = <<<SQL
SELECT
post_type,
post_author,
COUNT(*) AS post_count
FROM
{$wpdb->posts}
WHERE 1=1
AND post_type NOT IN ('revision','nav_menu_item')
AND post_status IN ('publish','pending')
GROUP BY
post_type,
post_author
SQL;
$posts = $wpdb->get_results($sql);
foreach($posts as $post) {
$post_type_object = $wp_post_types[$post_type = $post->post_type];
if (!empty($post_type_object->label))
$label = $post_type_object->label;
else if (!empty($post_type_object->labels->name))
$label = $post_type_object->labels->name;
else
$label = ucfirst(str_replace(array('-','_'),' ',$post_type));
if (!isset($counts[$post_author = $post->post_author]))
$counts[$post_author] = array();
$counts[$post_author][] = array(
'label' => $label,
'count' => $post->post_count,
);
}
}
return $counts;
}
Die resultierende Benutzeroberfläche
Und so sieht es bei meiner Testinstallation von WordPress 3.0.1 aus:
(Quelle: mikeschinkel.com )
Laden Sie den vollständigen Code herunter
Sie können den vollständigen Code von Gist herunterladen :
Sie können diesen Code in die functions.php
Datei Ihres Themas kopieren oder die Datei in ein Plugin aufnehmen, je nachdem, was Sie auswählen.
Hoffe das hilft!