Mittwoch, 23. Mai 2018

Wordpress Kommentar-Funktion DSGVO konform

Das Anpassen der eigenen Webseite an die DSGVO (GDPR) ist viel diskutiert und doch gibt es noch nicht für alles eine adäquate Lösung. Ebenso ist es mit der Kommentarfunktion in Wordpress, wenn diese auch für nicht-registrierte Besucher zur Verfügung stehen soll. Wordpress hat dabei nur an registrierte User gedacht.

Das problematische an der Kommentarfunktion von Wordpress ist schon länger das Speichern der IP. Zudem wird nun problematisch, wenn einerseits "Name" und "Emailadresse" als Pflichtangaben angegeben werden müssen und andererseits auch ohne Pflichtangabe deren Speicherung.

Es bestehen zwei Möglichkeiten:

1. Möglichkeit) Kommentarfunktion erweitern
Es wird die Funktionalität der Kommentarfunktion um eine Datenschutzerklärung-Checkbox erweitert und an dem Speichern der Daten nichts geändert.
Wichtig: Das Speichern/Archivieren von IP, Name und Emailadresse muss mit in die Datenschutzerklärung aufgenommen werden.
Zudem kann aus Punkt 2 die Funktion zur Änderung der IP verwendet werden (ganz unten).
<?php
/**
* Author:            fcojgodoy
* License:           GPL-2.0+
* Source: https://github.com/fcojgodoy/wp-comment-policy-checkbox/blob/master/wp-comment-policy-checkbox.php
*/
// Die Checkbox einbauen
function wpcpc_custom_fields($fields) {
// Hier die URL zur Webseite der Datenschutzerklärung einfügen
$url = 'https://www.example.com/datenschutz.php';
$read_and_accept = __('Ich akzeptiere die ', 'wp-comment-policy-checkbox');
$privcay_policy = __('Datenschutzerklärung', 'wp-comment-policy-checkbox');
$fields['top_copy'] = '<small class="comment-form-policy-top-copy">' . wpautop(get_option('wpcpc_policy_top_copy')) . '</small>';
$fields['policy'] = '<p class="comment-form-policy">' . '<label for="policy" style="display:block !important"><input id="policy" name="policy" value="policy-key" class="comment-form-policy__input" type="checkbox" style="width:auto" aria-required="true">' . esc_html($read_and_accept) . '<a href="' . esc_url($url) . '" target="_blank" class="comment-form-policy__see-more-link">' . esc_html($privcay_policy) . '</a><span class="comment-form-policy__required required"> *</span></label></p>';
return $fields;
}
add_filter('comment_form_default_fields', 'wpcpc_custom_fields');
// Den Check der Checkbox einbauen
function wpcpc_verify_policy_check($policydata) {
if (!isset($_POST['policy']) && !is_user_logged_in())
wp_die( '<strong>' . __('ERROR: ') . '</strong>' . __('Du musst die Datenschutzerklärung akzeptieren.', 'wp-comment-policy-checkbox') . '<p><a href="javascript:history.back()">' . __('&laquo; Back') . '</a></p>');
return $policydata;
}
add_filter('preprocess_comment', 'wpcpc_verify_policy_check');
?>

2. Möglichkeit) Kommentarfunktion kürzen
Es wird die Funktionalität der Kommentarfunktion auf das wesentliche gekürzt und keine Daten, außer der Kommentar selbst, gespeichert.
- Dazu darf in den Einstellungen > Diskussion "Benutzer müssen zum Kommentieren Name und E-Mail-Adresse angeben" nicht als Pflichtangaben angehakt sein.
- Der Infotext (comment_notes_before) "Deine E-Mail-Adresse wird nicht veröffentlicht." über dem Kommentarfeld kann mit der function edit_comment_before entfernt/geändert/gelöscht werden.
- Die neue WP Checkbox "Meinen Namen, E-Mail und Website in diesem Browser speichern, bis ich wieder kommentiere." kann mit der function edit_comment_cookies_checkbox entfernt werden.

Empfehlenswert:
- Zudem ein reCaptcha (Plugin) verwenden und den Spamfilter aktivieren.
- Mit der function edit_comment_after einen Hinweistext für eventuelle Freigabe (bei Spamverdacht) anzeigen lassen
- Die Checkbox aus Punkt 1 einfügen kann nicht schaden.

Mittels ein paar Funktionen, die einfach in die functions.php des aktiven Themes kopiert werden können, lässt sich das Problem in den Griff bekommen. Die Funktionen sind mit Kommentaren versehen, die selbsterklärend sind. Am Ende noch ein paar SQL Befehle zur Bereinigung der Datenbank von bestehenden Daten.

Die Funktionen werden zur einfacheren Auswahl einzeln aufgelistet.

Los gehts!
<?php
// Checkbox "im Browser speichern" editieren
function edit_comment_cookies_checkbox($fields) {
$fields['cookies'] = '';
return $fields;
}
add_filter( 'comment_form_default_fields', 'edit_comment_cookies_checkbox' );
?>
<?php
// Formfield "Name" editieren. Entfernen = "Anonymous"
function edit_comment_author_field($fields) {
$fields['author'] = '';
return $fields;
}
add_filter( 'comment_form_default_fields', 'edit_comment_author_field' );
?>
<?php
// Formfield "Email" editieren
function edit_comment_email_field($fields) {
$fields['email'] = '';
return $fields;
}
add_filter( 'comment_form_default_fields', 'edit_comment_email_field' );
?>
<?php
// Formfield "Website" editieren
function edit_comment_url_field($fields) {
$fields['url'] = '';
return $fields;
}
add_filter( 'comment_form_default_fields', 'edit_comment_url_field' );
?>
<?php
// comment-notes über dem Kommentarfeld editieren.
function edit_comment_before($defaults) {
$defaults['comment_notes_before'] = '';
return $defaults;
}
add_filter( 'comment_form_defaults', 'edit_comment_before' );
?>
<?php
// comment-notes unter dem Kommentarfeld editieren.
function edit_comment_after($defaults) {
$defaults['comment_notes_after'] = '<p class="comment-notes">' . __( 'Dein Kommentar muss eventuell erst noch freigegeben werden.' ) . ( $req ? $required_text : '' ) . '</p>';
return $defaults;
}
add_filter( 'comment_form_defaults', 'edit_comment_after' );
?>
<?php
// "IP" editieren
function edit_comment_ip()

 return "127.0.0.1"; // localhost
}
add_filter( 'pre_comment_user_ip', 'edit_comment_ip', 50);
?>
<?php
// Author "Name" editieren
function edit_comment_author_name()
{
return "Gast";
}
add_filter( 'pre_comment_author_name', 'edit_comment_author_name', 50);
?>
Zum Ausblenden der Namen der Kommentar-Autoren im Gästebuch dieses CSS in die style.css des aktiven (child) Themes einfügen:
cite.comment-author {
display: none !important;
Die SQL Befehle zum bereinigen der Datenbank von vorhandenen Daten aus der Kommentarfunktion. Bitte einzeln verwenden.
VORSICHT: Löschbefehle! Besser vorher die Datenbanktabelle "kopieren" zur Wiederherstellung.
UPDATE `wp_comments` SET `comment_author_IP`='127.0.0.1'
UPDATE `wp_comments` SET `comment_author_email`=''
UPDATE `wp_comments` SET `comment_author_url`=''
UPDATE `wp_comments` SET `comment_author`='Gast'
Mehr Informationen zu den default-Werten der functions auf der comment_form Wordpress-Codex-Seite: https://codex.wordpress.org/Function_Reference/comment_form

Dies ist keine Rechtsberatung.
Keine Garantie. Keine Gewähr. Kein Support.