Die DSGVO betrifft auch die Kommentarfunktion in WordPress. Beim Kommentar werden personenbezogene Daten hinterlassen und gespeichert. Dafür wird ein Opt-In, also eine Checkbox im Kommentarformular benötigt. Eine Lösung ohne Plugin.
Ein Update zum Update von WordPress 4.9.6 findest Du am Ende des Artikels.
Der IP-Adresse in den Kommentaren habe ich mich ja bereits in diesem Beitrag entledigt, aber Name und E-Mail-Adresse der Kommentierenden hätte ich dann irgendwie doch ganz gerne. Da diese Daten aber personenebzogen sind und gespeichert werden, müssen Kommentierende der Datenschutzerklärung zustimmen.
Das geht natürlich am Besten über eine Checkbox, die ohne gesetztes Häkchen den Kommentar nicht absendet. Meine Suche nach einem Plugin war nicht sonderlich erfolgreich.
Die hier präsentierte Lösung ist nicht perfekt. Wenn aber WordPress nicht bis zum 25. Mai mit einem entsprechenden Update versorgt wird, ist sie zumindest eine erste Hilfe.
Inhaltsverzeichnis
Checkbox für Kommentarrichtlinien
Ich hatte eine solche Checkbox schon früher hier mal im Einsatz, als Bernd Sonnensegel und Ute Laufschuh noch aktiver waren. Damit habe ich meine Kommentarrichtlinien bestätigen lassen. Netterweise stand dort drin, dass Namen die wie Produkte klingen und dazu eine entsprechende URL beinhalten, als Werbung in Rechnung gestellt wird. Einen hat es wirklich mal erwischt :-)
Auf jeden Fall hatte ich also schon einmal eine solche Lösung mit dem Plugin Contact Form 7 erarbeitet. Durch einen Wechsel des Themes ist mir das aber abhanden gekommen und ich habe es auch nicht mehr hinbekommen, diese Lösung wieder herzustellen.
Aber so schwierig kann es ja nicht sein, in der comments.php eine kleine, als Pflichtfeld anklickbare Checkbox einzubauen, oder? Ist es eigentlich auch nicht.
Validierungsfunktion des Browsers nutzen
Mit HTML 5 kam einiges an Neuerungen mit. Unter anderem auch neue Typen von Formularfeldern. Besonders für Mobilgeräte brachten diese Vorteile. So wird bei Browsern auf Smartphones beim Formularfeld vom Typ „numbers“ keine komplette Tastatur, sondern nur die Zahlen angeboten.
Auch praktisch ist das neue Attribut „required“. Ist dieses im Tag eingesetzt, wird dieses zum Pflichtfeld. Eingaben werden dadurch zwar nicht validiert, Formulare lassen sich aber dadurch nicht unausgefüllt absenden.
novalidate beim Kommentarformular?
Diese Funktion des Browsers lässt sich allerdings mit dem Attribut „novalidate“ auch komplett deaktivieren und genau das ist/war bei einer WordPress-Installation auch so eingestellt. Leider lässt sich über das Theme (zumindest bei meinen verwendeten) das <form>-Tag nicht bearbeiten, da dieses scheinbar direkt aus dem WordPress-Kern kommt.
Um das zu überprüfen, einfach einen Beitrag der Kommentare ermöglicht im uneingeloggten Zustand öffnen und um Quelltext nach dem Wort „novalidate“ suchen.
Taucht dieses nicht oder wenigstens nicht im Kommentar-Formular auf, kann der nächste Schritt übersprungen werden.
Das novalidate-Attribut entfernen
Direkt lässt sich das novalidate-Attribut des Formulares also nicht entfernen. Und an den Systemdateien von WordPress sollte ja eh nichts rumgedoktort werden.
Bleibt als Lösung ein JavaScript-Codeschnipsel, der am Ende der Seite eingebunden wird und beim Kommentarformular aus dem <form>-Tag das Attribut entfernt. Auch wenn jetzt jQuery verwendet werden könnte, genügt auch „normales“ JavaScript dafür:
1 2 3 |
<script> document.getElementById('commentform').removeAttribute('novalidate'); </script> |
Dieser Schnipsel in der footer.php platziert (am besten ein Child-Theme verwenden), entfernt nach dem Laden der Seite das Attribut aus dem Formular mit der ID „commentform“.
Ganz praktisch, fehlt nur noch die Checkbox im Formular selber.
Wichtig: Im Quelltext der Seite ist das novalidate später immer noch sichtbar, auch wenn es vom JavaScript entfernt wurde. Die Quelltextansicht in den Webentwickertools der Browser (über F12 zu erreichen) zeigt aber, ob das Entfernen geklappt hat.
Checkbox in WordPress-Kommentar einbauen
Dafür wird jetzt die comments.php benötigt. Ist diese noch nicht im Child-Theme-Ordner vorhanden, muss diese zunächst dort hinein kopiert werden.
Der eigentliche Aufbau des Kommentarbereichs wird durch ein Array bestimmt. Dieses Array wird an die WordPress-Funktion comment_form() übergeben.
Am Beispiel dieses Themes von Elmastudio sieht das so aus:
1 2 3 4 5 6 7 8 9 10 |
<?php $comment_args = array( 'fields' => apply_filters( 'comment_form_default_fields', array( 'author' => '<p class="comment-form-author">' . '<label for="author">' . esc_html__( 'Name', 'uku' ) . '</label><input id="author" name="author" type="text" placeholder="' . esc_html__( 'Name', 'uku' ) . '" value="' . esc_attr( $commenter['comment_author'] ) . '" size="30" aria-required="true"/></p>', 'email' => '<p class="comment-form-email">' . '<label for="email">' . esc_html__( 'Email', 'uku' ) . '</label> ' . ( $req ? '<span>*</span>' : '' ) . '<input id="email" name="email" type="text" placeholder="' . esc_html__( 'Email', 'uku' ) . '" value="' . esc_attr( $commenter['comment_author_email'] ) . '" size="30" aria-required="true"/>'.'</p>', 'url' => '<p class="comment-form-url"><label for="url">' . esc_html__( 'Website', 'uku' ) . '</label>' . '<input id="url" name="url" type="text" placeholder="' . esc_html__( 'Website', 'uku' ) . '" value="' . esc_attr( $commenter['comment_author_url'] ) . '" size="30" /></p>', 'comment_notes_after' => '' ) ) ); comment_form($comment_args); ?> |
Hier muss nun auch unsere Checkbox eingearbeitet werden. Dazu habe ich folgende Zeile zwischen den Array-Eintrag url und comment_notes_after eingesetzt:
1 |
'checkbox' => '<p class="comment-form-url"><label for="check">' . esc_html__( 'Website', 'uku' ) . '</label>' . '<input id="check" name="check" type="checkbox" placeholder="' . esc_html__( 'Website', 'uku' ) . '" value="1" required /> Ich akzeptiere die <a href="https://www.link" target="_blank">Datenschutzhinweise</a>.</p>', |
Damit erscheint vor dem Button für das Absenden des Kommentars die Checkbox mit dem Text, der den Link zu den Datenschutzhinweisen beinhaltet.
Ungefähr so:
Vielleicht gibt es auch eine Möglichkeit, das novalidate-Attribut über einen Parameter beim Funktionsaufruf der comment_form() zu unterbinden – ich konnte dazu leider nichts finden. So ist die Lösung mit dem JavaScript ein kleiner Workaround, der natürlich mit deaktiviertem JavaScript locker umgangen werden kann.
[Update]
Mittlerweile hat WordPress mit Version 4.9.6 ein passendes Update für die DSGVO bekommen. Auch an die Checkbox bei den Kommentaren wurde dabei gedacht. Nicht.
Mit dem Update erscheint bei den Kommentaren folgender Text:
Meinen Namen, E-Mail und Website in diesem Browser speichern, bis ich wieder kommentiere.
Gemeinsam mit einer Checkbox, die allerdings kein Pflichtfeld ist. Ein nicht anklicken der Checkbox verhindert allerdings kein Speichern in der Datenbank, sondern scheinbar lediglich das Setzen eines Cookies, damit der Besucher später direkt kommentieren kann.
Ok, von mir aus. Komischerweise erscheint dieser Hinweis hier auf der Seite nicht. Und auch bei einer anderen Seite erscheint sie erst, wenn ich das Theme wechsele. Und dort habe ich bisher an der comments.php keine Änderungen vorgenommen.
Ob es nun DSGVO-konform ist oder nicht, wer nun möglicherweise zwei Checkboxen bei den Kommentaren hat, kann auch die neue mit JavaScript entfernen:
1 2 3 4 |
<script> var remove_check = document.querySelectorAll(".comment-form-cookies-consent")[0]; remove_check.parentNode.removeChild(remove_check); </script> |
Diesen Code auch einfch wieder in der footer.php einfügen.
Ich habe das jetzt mal eingebaut
Passt soweit. Allerdings wird das ‚Webseite‘ von dem Wert placeholder angezeigt. Kann man das einfach entfernen?
Ja, einfach den kompletten String placeholder=“‚ . esc_html__( ‚Website‘, ‚uku‘ ) . ‚“ rausnehmen.
Liegt dann wohl am Theme.
Hallo Steffen,
vielen Dank für den Beitrag. Super Sache, den Hinweis zum Datenschutz manuell und ohne Extra-Plugin einpflegen und so seinen Blog DSGVO-konformer machen zu können.
Für alle, denen das zu kompliziert ist, gibt es seit einigen Wochen ein neues Plugin: „WP Comment Policy Checkbox“. Aktuell leider nur auf Englisch und Spanisch, die deutschsprachige Version scheint in Arbeit zu sein. Wer sich mit der Sprachdatei-Anpassung (.pot, .mo, .po) ein wenig auskennt, kann die Meldung aber schon jetzt „eindeutschen“. Oder aber (übergangsweise) quick and dirty die PHP-Datei wp-comment-policy-checkbox.php modifizieren, um eine deutschsprachige Ausgabe und -fehlermeldung zu erreichen.
Moin Steffen, danke für deine Mühe! Baue es ein.
Warum hast du es hier noch nicht eingebaut? ;)
Grüße,
Christoph
Kommt noch…
Danke dir!
Pingback:WordPress und DSGVO: IP-Adresse bei Kommentaren entfernen
Hi Steffen,
danke, genau das, was ich gesucht habe. :-)
Wertvolle Informationen.
Sehr guter Artikel!
Hallo Steffen,
danke für die Anleitung – leider funktioniert das bei mir noch nicht.
Allerdings sieiht meine coments.php auch etwas anders aus, sie arbeitet scheinbar nicht mit den arrays, wie bei dir dargestellt, sondern endet mit:
Ich habe an der Stelle deinen Code eingefügt. Es tut sich auch etwas (Deine Labels, welche es bei mir nicht gab und auch die Website-Feld werden hinzugefügt) – die Checkbox wird allerdings nicht angezeigt.
apply_filters( ‚comment_form_default_fields‘, array(
‚author‘ => “ . “ . esc_html__( ‚Name‘, ‚uku‘ ) . “,
‚email‘ => “ . “ . esc_html__( ‚Email‘, ‚uku‘ ) . ‚ ‚ . ( $req ? ‚*‚ : “ ) . “.“,
‚checkbox‘ => “ . esc_html__( ‚Website‘, ‚uku‘ ) . “ . ‚ Ich akzeptiere die Datenschutzhinweise.‘,
‚url‘ => “ . esc_html__( ‚Website‘, ‚uku‘ ) . “ . “,
‚comment_notes_after‘ => “
) )
);
comment_form($comment_args); ?>
Hat jemand evtl. eine Lösung für mich?
Ich möchte ungern ein Pligin verwenden.
Vorab vielen Dank!
Hallo Steffen,
ich nochmal – zu meinem Kommentar von vorhin: Ich habe jetzt mal die Beschreibung ‚checkbox‘ für das array geändert auf ‚url‘ – ist zwar sicher nicht die schönste Lösung, aber jetzt funktioniert das Formular …
Gibt es sonst eine sauberere Lösung oder muss man ‚checkbox‘ noch irgendwo definieren/aktivieren, damit das funktioniert?
Eine weitere Frage: Dass diese Checkbox vom Kundenaktiviert wurde, wird nun aber nicht für mich als Nachwies irgendwo hinterlegt, richtig? Weiß du, ob das gemäß DSGVO ausreicht, dass die Funktion da ist und das Formular ohne Bestätigung ghar nicht verschickt werden kann – und das quasi eine technischer Nachweis ist?
Vielen Dank vorab!
Für Newsletter müsste das Optin zum Nachweis gespeichert werden. Für Kommentare fände ich das ziemlich unsinnig, es sei denn du willst die Daten für irgendwas verwenden – aber dann wäre ja ein Double-Optin nötig.
Hallo Steffen,
vielen Dank für den super DSGVO-Hack! Ich versuche auch immer Plugins zu sparen.
Funktioniert einwandfrei. Dann schauen wir mal, wann WordPress mit einer einfacheren Lösung kommt.
Schöne Grüße,
Vera
Bei mir geht dass nicht schade