[WordPress] Affichez le vrai nombre de commentaires d’un billet #2

Rate this post

Dans un précédent billet, j’ai expliqué comment corriger le bug du cache du nombre de commentaires d’un billet.

Une fois ce bug passé, WordPress propose des méthodes pour afficher simplement le nombre de commentaires. la plus connue est la fonction get_comments_number().

Avec un tel nom, on pourrait naturellement s’attendre à ce qu’elle affiche le nombre de commentaires d’un billet. Et bien la réponse est plutôt « Oui mais non… ».

En effet, par défaut, cette fonction affiche tous les commentaires, c’est à dire les commentaires au sens propre du terme, plus les pingbaks et trackbacks.
Honnêtement, j’ai mis du temps à comprendre que le bug que je recherchais n’en était pas un.

Bien entendu il existe différentes manière d’y remédier.

 

La méthode « old school »

La méthode old school consiste à y aller grossièrement dans le template des commentaires (en général comments.php).

/* Count the totals */
  $numPingBacks = 0;
  $numComments  = 0;

  /* Loop throught comments to count these totals */
  foreach ($comments as $comment)
    if (get_comment_type() != "comment") $numPingBacks++; else $numComments++;

C’est le code que j’avais mis dans mon thème actuel et qui permet d’afficher le nombre de commentaires.
Pour récupérer les dits commentaires, WordPress 2.7 avait introduit une méthode satisfaisante :

wp_list_comments('type=comment&callback=list_comments');

 

La méthode « je maîtrise les filtres et les hooks »

Depuis, j’ai trouvé une méthode beaucoup plus classe, qui va vous permettre de briller dans les diners mondains.

L’utilisation des filtres WordPress permet de faire la même chose, sans écrire du code grossier directement dans le template.

Il suffit de coller le code suivant dans le fichier functions.php de votre thème :

function ws_comment_count( $count ) {
	if ( ! is_admin() ) {
		global $id;
		$comments_by_type = &separate_comments(get_comments('status=approve&post_id=' . $id));
		return count($comments_by_type['comment']);
	} else {
		return $count;
	}
} 

add_filter('get_comments_number', 'ws_comment_count', 0);

Il vous suffit ensuite d’utiliser le très désormais bien nommé get_comments_number() où bon vous semble. La fonction retournera le nombre de commentaires (sans les pings).

 

La méthode plugin

Pour les plus fainéants ou les moins intrépides, la dernière solution consiste à utiliser un plugin. Le meilleur que je connaisse s’appelle Ping/Track/Comment count.

Il permet de faire plusieurs choses :

  • Afficher le nombre de commentaires: comment_type_count('comment');
  • Afficher le nombre de trackbacks : comment_type_count('trackback');
  • Afficher le nombre de pingbacks : comment_type_count('pingback');
  • Afficher le nombre de pings (=trackbacks + pingbacks) : comment_type_count('ping');
  • Afficher le total : comment_type_count();

Il existe également la fonction qui retourne simplement la valeur sans l’ajouter à la sortie standard : get_comment_type_count();

Il est également possible d’utiliser ces fonctions en spécifiant l’ID d’un billet : comment_type_count('pingback', 534);