En supposant que j'ai compris la question, ce que vous devez faire est de vous connecter aux deux crochets liés aux en-têtes de colonne et à la valeur des colonnes pour les pages de gestion d'administration. Ils sont 'manage_{$type}_columns'
et 'manage_{$type}_custom_column'
où dans votre cas d' utilisation {$type}
est users
.
Le 'manage_users_columns'
crochet
Cette première est simple, elle vous permet de spécifier les en-têtes de colonne et donc les colonnes disponibles. WordPress code en dur la valeur de la colonne "Posts" , donc comme vous voulez la changer, nous allons simplement la supprimer avec unset()
puis ajouter une nouvelle colonne avec le même titre mais qui a à la place l'identifiant de '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;
}
Le 'manage_users_custom_column'
crochet
Ensuite, vous devez utiliser le 'manage_users_custom_column'
hook qui n'est appelé que pour les colonnes non standard. Nous testons pour $column_name=='custom_posts'
rendre notre code robuste au cas où nous ajouterions de nouvelles colonnes utilisateur à l'avenir, puis nous récupérons le nombre de types de messages utilisateur à partir de la fonction que j'ai écrite, _yoursite_get_author_post_type_counts()
dont je parlerai dans la suite. J'ai ensuite joué avec quelques façons de formater cela, mais j'ai décidé qu'un HTML <table>
était le plus approprié (car il s'agit d' un tableau de données) . Si une table ne fonctionne pas pour vous, je suppose que vous serez en mesure de générer assez facilement des balises différentes:
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;
}
Obtenir le nombre de publications par type de publication pour chaque utilisateur / auteur
Enfin, il y a la récupération du nombre de publications par type de publication par auteur / utilisateur. En général, j'essaie de m'en tenir à l'utilisation WP_Query()
lors de l'exécution de requêtes sur des publications, mais cette requête aurait nécessité l'utilisation de nombreux autres crochets, il semblait simplement plus facile d'être "méchant" et de faire tout en un.
J'ai omis tout poste de $post->post_type
is 'revision'
or 'nav_menu_item'
but but in 'attachments'
. Vous pourriez trouver préférable d'inclure explicitement les types de messages que vous souhaitez au lieu d'exclure les quelques-uns que j'ai faits.
J'ai également filtré $post->post_status
pour seulement 'publish'
et 'pending'
. Si vous souhaitez également inclure 'future'
, 'private'
et / ou 'draft'
vous devrez apporter les modifications dans le code.
Pour chaque chargement de page, j'appelle cette _yoursite_get_author_post_type_counts()
fonction une seule fois, puis je stocke dans une variable statique plutôt que d'appeler pour chaque utilisateur. Je stocke dans un tableau indexé par les ID auteur / utilisateur contenant un tableau avec le nom du type de message dans l'élément 'label'
et bien sûr le nombre dans un élément du même nom:
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;
}
L'interface utilisateur résultante
Et voici à quoi cela ressemble appliqué à mon installation de test de WordPress 3.0.1:
(source: mikeschinkel.com )
Téléchargez le code complet
Vous pouvez télécharger le code complet depuis Gist :
Vous pouvez copier ce code dans le functions.php
fichier de votre thème ou stocker le fichier dans un plugin, selon votre choix.
J'espère que cela t'aides!