WordPress wäre nicht DAS erfolgreiche/erfolgreichste CMS dass wir aktuell haben, wenn es nicht die Möglichkeit gäbe es auf die Daten anzupassen, die es im Projekt wirklich gibt.
Dafür relevant sind Custom Post Types / Benutzerspezifische Inhaltstypen und Custom Fields / Benutzerspezifische Felder.
In WordPress können aber auch Kommentare benutzerspezifisch sein.
Tatsächlich gibt es bereits mehrere Kommentartypen:
- Kommentare (
comment_type = 'comment'
– in der Datenbank leeres Feld, da Standard ) - Pingback (
comment_type = 'pingback'
) - Trackback (
comment_type = 'trackback'
)
Für Custom Post Types gibt es Tools im WordPress-Kern um sie anzulegen. Noch leichter geht es mit Plugins oder Libraries wie Extended CPT mit dem auch Custom Taxonomies / Benutzerspezifische Taxonomien/Kategorien angelegt werden können.
Custom Fields sind aufwändiger – deshalb ist es hier sehr angenehm Plugins/Libraries zu verwenden. Ich komme bisher immer wieder auf Advanced Custom Fields zurück, auch, wenn ich mich hin und wieder nach Alternativen umsehe.
Für Custom Comment Types gibt es solche Tools nicht. Tatsächlich ist dieses Feature im Kern kaum ausgestaltet und ein Versuch das Handling auszubauen ist im Ansatz stecken geblieben. Ist wohl einfach zu selten benötigt. Aber es gibt genug um Custom Comment Types zu verwenden!
Custom Comment Types verwenden
Erste Einsicht vorne weg:
Custom Comment Types sind im Endeffekt nur ein String in der „comment_type“-Spalte von Kommentaren. Das ist der komplette technische Unterschied zu den vorhandenen Kommentar-Typen. Der Rest ist, was du drauß machst.
Das ist ein SQL-Export eines Datensatzes aus dem Projekt in dem ich mit Custom Comment Types arbeite. Unser erster Comment-Type ist „reaction“. Hinzugekommen ist inzwischen noch „donation“ und natürlich die WordPress-Eigenen Kommentare mit leerem comment_type
in der Datenbank.
INSERT INTO kas_wp_comments (comment_ID, comment_post_ID, comment_author, comment_author_email, comment_author_url, comment_author_IP, comment_date, comment_date_gmt, comment_content, comment_karma, comment_approved, comment_agent, comment_type, comment_parent, user_id)
VALUES
(3756, 5212, 'Sebastian Gaertner', 'mail@gaertner-webentwicklung.de', 'https://gaertner-webentwicklung.de', '172.17.0.1', '2021-04-03 15:56:08', '2021-04-03 13:56:08', '', 0, '1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36', 'reaction', 0, 18);
Code-Sprache: SQL (Structured Query Language) (sql)
Darin enthalten sind auch die klassischen Felder eines Kommentars:
comment_ID
- Die Kommentar IDcomment_post_ID
- ID des Posts/Objekts auf das er sich beziehtcomment_author
- Infos über den:die Autor:in des Kommentarscomment_author_email
comment_author_url
comment_author_IP
comment_date
- Datum in der Zeitzone der Seitecomment_date_gmt
- nochmal in GMTcomment_content
- der Inhalt des Kommentarscomment_karma
- aktuell von WP nicht verwendet. Kann genutzt werden um z. B. upvotes oder sonstige Bewertungen zu handhaben. Ist aber nicht zukunftssichercomment_approved
- sozusagen der "post_status" des Kommentarscomment_agent
comment_type
- wie oben beschrieben der "post_type" des Kommentars. Den wir genutzt haben um eigene Typen anzulegencomment_parent
- für erschachtelte Kommentarhierarchienuser_id
- falls die Person eingeloggt war, die User-ID
WordPress Core ist zwar an sich bereit für Custom Comment Types, unterstützt es aber nur rudimentär. Ich habe das gelöst, indem ich in der Funktion comment_form()
, die das Kommentar-Formular anzeigt, ein hidden Formularfeld eingefügt habe.
<input type="hidden" name="comment_type" value="reaction">
Code-Sprache: HTML, XML (xml)
Das wird mir mit dem Kommentar mit geschickt und kann dort ausgewertet werden.
add_action( 'comment_post', 'save_reaction_comment_meta_data' );
function save_reaction_comment_meta_data( $comment_id ) {
if ( ! isset( $_POST['comment_type'] ) || ! in_array( $_POST['comment_type'], [ 'reaction' ] ) ) {
return;
}
if ( ! isset( $_POST['reaction'] ) ) {
return;
}
$commentarr = get_comment( $comment_id, ARRAY_A );
$commentarr['comment_type'] = sanitize_key( $_POST['comment_type'] );
$commentarr['comment_meta'] = [
'reaction' => sanitize_key( $_POST['reaction'] ),
];
wp_update_comment( $commentarr );
}
Code-Sprache: PHP (php)
In dem Beispiel speichere ich Meta-Daten an den Kommentar. Wir verwenden Kommentare um „Reactions“ abzubilden. Also sowas wie Likes/“Gefällt mir“ und die Meta-Info „reaction“ enthält die Info ob es „Daumen hoch“, „Daumen runter“ etc. ist.
Kommentare können wie sonst auch üblich via wp_list_comments()
geladen werden. In den Parametern der Funktion kann einfach ein type
definiert werden.
Natürlich werden die Kommentare auch im Backend normal gelistet.
Vielleicht bietet sich auch für dein Projekt ein Custom Comment Type an.
Schreibe einen Kommentar