Recompter le nombre de commentaires pour tous les articles

Pour des raisons de performance, WordPress ne compte pas chaque commentaire quand il doit afficher leur nombre sous un article. Cette valeur est « cachée », c’est-à-dire qu’elle est stockée dans la base de données et c’est ce nombre qui est affiché. Quand un commentaire est ajouté, le CMS met automatiquement à jour cette valeur, si bien que c’est toujours la bonne qui est affichée.

Il y a un cas de figure toutefois qui fait que l’on doit forcer un nouveau comptage des commentaires. Si vous acceptiez les pingbacks sur votre blog — c’est le réglage par défaut — et si vous décidez ensuite de ne plus les afficher, le nombre de commentaires mémorisé dans la base de données sera faux pour tous les articles qui ont eu des pingbacks. C’est le cas par exemple sur cet article : quatre commentaires annoncés, alors qu’il n’y en a que trois d’affichés.

Quatre commentaires annoncés, alors qu'il n'y en a que trois d'affichés.
Quatre commentaires annoncés, alors qu’il n’y en a que trois d’affichés.

Naturellement, si vous recevez beaucoup de commentaires, le chiffre finira par être mis à jour sitôt qu’un lecteur commentera un article. Mais si vous avez beaucoup d’articles, les compteurs faux resteront probablement un bon moment. Et si vous n’aimez pas avoir de faux compteurs, voici la méthode à suivre pour recompter le nombre de commentaires pour tous les articles.

Avant toute chose, pensez bien à sauvegarder la base de données, puisqu’il faut directement intervenir à ce niveau. Exportez la base avec PHPMyAdmin ou en SSH, ou bien assurez-vous bien que la sauvegarde fournie par votre hébergeur soit à jour. Bref, prenez vos précautions.

Ensuite, vous pouvez vérifier que vous avez besoin d’intervenir en utilisant cette commande SQL directement sur la base de données. Dans ce code, la base correspondant à votre blog est nommée wordpress, pensez bien à la changer en fonction de vos besoins.

SELECT wpp.id, wpp.post_title, wpp.comment_count, wpc.cnt
FROM wordpress.wp_posts wpp
LEFT JOIN
(SELECT comment_post_id AS c_post_id, count(*) AS cnt FROM wordpress.wp_comments
 WHERE comment_approved = 1 GROUP BY comment_post_id) wpc
ON wpp.id=wpc.c_post_id
WHERE wpp.post_type IN ('post', 'page')
      AND (wpp.comment_count!=wpc.cnt OR (wpp.comment_count != 0 AND wpc.cnt IS NULL));

J’ai utilisé PHPMyAdmin et j’ai obtenu ce résultat qui prouvait bien qu’il était temps d’intervenir. Avec 376 lignes en retour, j’avais donc 376 articles ou pages avec un mauvais nombre de commentaires. Si vous n’avez aucun résultat, vous pouvez vous arrêter là, tout va bien !

Sur mon blog, j'avais 376 articles ou pages avec un compteur de commentaires erroné.
Sur mon blog, j’avais 376 articles ou pages avec un compteur de commentaires erroné.

Sinon, voici la commande SQL qui va corriger le compteur. Veillez bien à nouveau à adapter le code avec le nom de votre base de données. Et si tout va bien, la commande corrigera le nombre de commentaires, tout simplement.

UPDATE wordpress.wp_posts wpp
LEFT JOIN
(SELECT comment_post_id AS c_post_id, count(*) AS cnt FROM wordpress.wp_comments
 WHERE comment_approved = 1 GROUP BY comment_post_id) wpc
ON wpp.id=wpc.c_post_id
SET wpp.comment_count=wpc.cnt
WHERE wpp.post_type IN ('post', 'page')
      AND (wpp.comment_count!=wpc.cnt OR (wpp.comment_count != 0 AND wpc.cnt IS NULL));

L’astuce et les commandes SQL à utiliser proviennent de cet article.

Image de couverture : Martin Fisch

Laisser un commentaire