comment_date und comment_date_gmt - wenn Kommentare unterschiedlich sortiert werden

24.11.2006 10:28 Uhr | Kommentare: 0 | Kommentar hinterlassen
Einsortiert in Software

Schrecksekunden beginnen manchmal ganz harmlos und so ganz nebenbei …

Erst Erstaunen und dann der kalte Schauer auf dem Rücken und dann die bange Frage im Kopf: Ist die Datenbank geschrottet?

Was war passiert?

So ganz nebenbei fielen mir unterschiedliche Reihenfolgen von Kommentaren auf: Die Dialogseite zeigte eine andere Reihenfolge der Kommentare an als die dazugehörige Einzelartikelseite.

Als Hintergrund muß man wissen, daß ich die Dialogseite durch ein eigenes PlugIn erzeugen lasse. Und das nimmt als Sortierkriterium aus der Kommentartabelle (wp_comments) das Feld comment_date_gmt.

Die Detailansicht einer Seite nimmt hingegen aus der gleichen Tabelle das Feld comment_date als Kriterium der Sortierung. Ja - das ist kein Witz - zu jedem Kommentar werden zwei Zeitstempel in unterschiedlichen Feldern abgespeichert. Und das sind eben die Felder:

  • comment_date_gmt
  • comment_date

Nun das macht unter bestimmten Bedingungen sogar viel Sinn - obwohl man eigentlich auch rechnen könnte. Na egal - es ist nun mal so.

Nun habe ich ja berichtet, daß ich ein paar Kommentare manuell übernehmen mußte. Dabei stimmten natürlich die Zeiten nicht. Die habe ich dann ganz normal aus WordPress heraus über die Funktion “Kommentar bearbeiten” und da den Punkt “Zeitstempel bearbeiten” unter “Erweitert” geändert. Nur was ich dabei nicht wußte, war die Tatsache, daß bei diesem Vorgang nur das Feld comment_date verändert wird. comment_date_gmt bleibt “unberührt“. :(

Die entscheidende Stelle

In der Datei wp-includes/comment-functions.php beginnt im Original (Wordpress 2.0.5) die Funktion wp-update-comment in Zeile 156. Und die ist dafür verantwortlich, daß nur comment_date geändert wird. Hier der entscheidende Auszug:


$result = $wpdb->query(
  "UPDATE $wpdb->comments SET
    comment_content = '$comment_content',
    comment_author = '$comment_author',
    comment_author_email = '$comment_author_email',
    comment_approved = '$comment_approved',
    comment_author_url = '$comment_author_url',
    comment_date = '$comment_date'
   WHERE comment_ID = $comment_ID" );

Und da fehlt comment_date_gmt - was zu der Differenz bei einer Änderung über den beschriebenen Weg führt.

Und so hält man die Zeitänderungen synchron

Eigentlich ist es ganz einfach: Man fügt zwei Zeilen ein - nämlich die roten:


$comment_date_gmt = gmdate('Y-m-d H:i:s', strtotime($comment_date) );

$result = $wpdb->query(
  "UPDATE $wpdb->comments SET
    comment_content = '$comment_content',
    comment_author = '$comment_author',
    comment_author_email = '$comment_author_email',
    comment_approved = '$comment_approved',
    comment_author_url = '$comment_author_url',
    comment_date_gmt = '$comment_date_gmt',
    comment_date = '$comment_date'
   WHERE comment_ID = $comment_ID" );

Bug oder Feature

Im Bugtrackingsystem von WordPress konnte ich nichts zu dem Thema finden. Auch sonst habe ich im Web nichts gefunden, was dieses Verhalten beschreibt. Wie gesagt - unter bestimmten Aspekten macht das originale Vorgehen Sinn. Ich finde es aber falsch: Wenn ich den Zeitstempel verändere, will ich ihn auch wirklich komplett ändern. Selbst wenn man von dieser Funktion nur in wenigen Fällen gebrauch macht. Zumal auch Wordpress mal auf das eine und mal auf das andere Feld bei der Sortierung schaut. Von PlugIns mal abgesehen. Persönlich bevorzuge ich comment_date_gmt als Kriterium, da es transparenter und eindeutiger ist. Oder es zumindest sein sollte ;)

Also kein Grund zur Aufregung, wenn es mal unterschiedliche Ergebnisse bei der Reihenfolge von Kommentare in Euren Blogs gibt. Vielleicht ist ja das hier beschriebene Verhalten die Ursache dafür.

Und 2.0.2 macht es auf alle Fälle auch so

Hat zumindest ein Blick in den Quellcode ergeben. Vielleicht sollte ich ja doch ‘n Bug bei WordPress aufmachen???

 

Hinterlasse einen Kommentar

Bitte beachten: Mit der Abgabe eines Kommentares oder dem Senden eines Trackbacks erklärst Du Dich mit den Kommentar- und Trackbackrichtlinien einverstanden!

XHTML: Diese Tags sind erlaubt: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>

Du kannst Deinen Kommentar nach dem Abspeichern noch 30 Minuten bearbeiten.

Kurznavigation

Featured Story

WordPress-Plugins

Tags

Kategorien

Empfehlungen

Hilfen und mehr ...

Kommerzielle Angebote

Anderes