Afficher le nombre d’articles par type de contenu dans la liste des utilisateurs de WordPress

Suite au tutoriel sur l’ajout de colonnes personnalisées dans le back-office de WordPress, je vous propose une nouvelle technique permettant de lister le nombre de contenu produits par chaque utilisateur – articles, pages, custom post type, autres, dans la liste des utilisateurs. Un complément très pratique pour retrouver les contenus d’un auteur en particulier à portée de main.

Si vous consultez le module Utilisateurs de WordPress, une colonne comptabilise le nombre d’articles rédigés par un auteur. Le problème est qu’avec l’avénément des types de contenus personnalisés – les fameux custom post types, ces derniers ne sont pas pris en compte.

Capture d'écran - Compteur d'articles des auteurs
Par défaut, seuls les articles sont comptabilisés

Notre objectif est d’obtenir un total pour chaque contenu comme ceci :

Capture d'écran - Compteurs par type de contenu sous WordPress
Des compteurs de contenu par utilisateur

Pour parvenir à ce résultat, copiez / collez le code suivant dans votre fichier functions.php ou dans un fichier de fonctions globales :

// Custom Post Type colonne utilisateurs
add_action('manage_users_columns','compteur_posts');
function compteur_posts($column_headers) {
 unset($column_headers['posts']);
 $column_headers['custom_posts'] = 'Contenu';
 return $column_headers;
}

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 = _compteur_posts();
 $custom_column = array();
 if (isset($counts[$user_id]) && is_array($counts[$user_id]))
 foreach($counts[$user_id] as $count) {
 $link = admin_url() . "edit.php?post_type=" . $count['type']. "&author=".$user_id;
 // admin_url() . "edit.php?author=" . $user->ID;
 $custom_column[] = "\t<tr><th><a href={$link}>{$count['label']}</a></th><td>{$count['count']}</td></tr>";
 }
 $custom_column = implode("\n",$custom_column);
 if (empty($custom_column))
 $custom_column = "<th>[none]</th>";
 $custom_column = "<table>\n{$custom_column}\n</table>";
 }
 return $custom_column;
}

function _compteur_posts() {
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', 'draft')
 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,
 'type' => $post->post_type,
 );
 }
 }
 return $counts;
}

Cette astuce a été proposée sur l’excellent WordPress Answers. A visiter d’urgence !

Pour ma part, j’estime que les prochaines versions de WordPress devraient intégrer davantage d’aspects propres aux types de contenu personnalisé. Qu’en pensez-vous ?

Crédits photo : kimioo

7 commentaires

  1. Julio Potier

    Le mot « perfection » a touché ce tuto… Rien à dire, et c’est plutot rare, pourtant j’ai bien cherché.
    Bravo Mike Schinkel ! Et merci WP Channel de nous l’apporter !

    Pour ce qui est de « WordPress devraient intégrer davantage d’aspects propres aux types de contenu personnalisé », tu t’auto-contredis car si c’est du contenu personnalisé, alors ce ne sera jamais intégré.

    1. Aurélien Denis auteur de l’article

      Oui on peut dire que j’ai passé une bonne demi-journée à la trouver celle-là ! Bravo à son auteur effectivement.

      Si je pense que l’on peut faire des efforts sur les custom post types tout de même mais ce sont des points de détails, je l’admets.

  2. meletwil

    Bonjour,

    J’ai suivi avec attention votre tuto, très claire et simple . mais là j’ai besoin d’un coup de main !!!

    depuis peu, lorsque je fais des modifications dans un article ou widget, elles sont visibles quand je suis loggé en tant qu’admin.

    Par contre dès que je suis déconnecté (comme un invité), les modifs n’aparraissent plus….

    Une fois déconnecté, le changement n’est plus pris en compte.

    J’ai nettoyé cache et testé sur plusieurs ordi. c’est toujours le même problème.

    Ce phénomène est arrivé alors que j’effectuais plusieurs modif. Les premières se sont bien passées et puis ca s’est plus rien:)

    pouvez vous m’aider?

    merci

  3. Meletwil

    Je pense à Wp super cache, Je sens que la désinstallation va être complexe, Si vous avez des astuces pour le faire proprement je suis preneur . Que la force soit avec vous !!! merci

  4. Sarah

    Bonjour,

    Je vais être un peu hors sujet mais je cherche a afficher le nombre de billets dans chaque rubrique comme le font beaucoup de blog, j’imagine que c’est une option a activer mais impossible de la trouver.

    Voici un exemple de ce que je cherche a afficher dans mon menu :

    CategorieA (10)
    CategorieB (5)
    Toutes (15)

    Savez vous si ca s’active bêtement ou si il faut du développement ?

    Merci

    Sarah

Laisser un commentaire