WordPress: Sync Comment Count

Synchronteile
Synchronisierung der Kommentare
Den Kommentarzähler unterhalb eines Artikels speist WordPress, vielleicht aus Gründen der Geschwindigkeit, aus der Datenbank-Tabelle wp_posts.comment_count. Aufgrund von mißlungenen manuellen Eingriffen, Unfällen oder sonstigen Mißgeschicken kann dieser Soll-Zähler schon einmal von der tatsächlichen Anzahl der vorliegenden Kommentare (Ist) abweichen. Technisch gesehen stellt das wohl kein Problem dar, aber es sieht unvorteilhaft aus, wenn fünf Kommentare angekündigt, aber nach einem Klick lediglich drei davon abgebildet werden.

Die wirkliche Anzahl der Kommentare je Post läßt sich allerdings sehr leicht aus der Tabelle wp_comments durch einfaches Zählen ermitteln und das Ergebnis in die Tabelle wp_posts übertragen. Wenn das ganze jetzt noch als sogenannte stored procedure angelegt wird, steht die Routine jederzeit zur Verfügung. In PhpMyAdmin könnte man im SQL-Editor dazu folgendes eingeben:

DROP PROCEDURE if exists proc_posts_commentcount_update //
CREATE DEFINER = WP_DB_User@localhost
  PROCEDURE proc_posts_commentcount_update()
  COMMENT 'fuehrt einen Soll-Ist-Abgleich der Kommentare durch'
  BEGIN
    update WP_Database.wp_posts as po
    left join (select comment_post_ID, count(*) as 'cnt'
    from WP_Database.wp_comments
    where comment_approved = '1'
    group by comment_post_ID) as co
    on co.comment_post_ID = po.ID
    set po.comment_count = coalesce(co.cnt, 0)
    where po.post_status = 'publish' and po.post_type = 'post';
  END //

Hinweis: Kommentare (Comment) dürfen bei einigen MySQL-Versionen scheinbar eine Länge von 64 Zeichen nicht übersteigen.

Zu jedem echten Post in der Tabelle wp_posts (Status = publish und Typ = post) werden die Vorkommen der freigegebenen Kommentare (Approved = 1) in der Tabelle wp_comments gezählt und die Anzahl in das Datenfeld wp_posts.comment_count eingetragen. Liegen keine Kommentare zu einem Post vor, so soll dies der Wert »0« und nicht »NULL« sein (Coalesce). Damit hat ein vollständiger Soll/Ist-Abgleich der Kommentare stattgefunden. Gespeicherte Prozeduren können jederzeit über das Call-Statement aufgerufen und ausgeführt werden.
rh2012-08-002