Um der seit dem 25.5.2018 aktiven EU-Datenschutzgrundverordnung kurz DSGVO gerecht zu werden, sollte man überall da, wo man personenbezogene Daten erfasst, einen entsprechenden Hinweis mit Einwilligung anbringen.
So auch im Fall der WordPress Kommentar Funktion. In den folgenden Absätzen möchte ich zeigen, wie einfach man ohne WP Plugin eine entsprechende Checkbox (als Pflichtfeld) mit Datenschutz-Hinweis im WP Kommentar Formular hinzufügt. Ja, das geht noch einfacher mit einem der vielen GDPR (Englisch für DSGVO) Plugins. Wenn man aber nur diese Funktion braucht, ist der Einsatz solcher Plugins etwas überladen. Letztendlich müssen die folgenden Code-Schnipsel einfach nur in die functions.php eures Themes (besser Child-Theme) kopiert werden.
Das Standard Formular um das Input Feld erweitern
Als erstes müssen wir natürlich das Input Feld dem Standard Kommentar Formular hinzufügen. Wir erstellen also eine Funktion, hier mit dem Namen webshaped_comment_form_privacy_input
. In dieser legen wir ein neues Input Feld sowie ein passendes Label an. Den Text des Labels kannst du einfach selbst editieren; dafür einfach den folgenden Textabschnitt (Zeile 11) suchen “HIER KANNST DU DEN TEXT EDITIEREN”.
Update: Sascha hat mich darauf aufmerksam gemacht, dass die Standard-Felder Author, Email und URL fehlen wenn die Funktion nur mit dem Datenschutz Input-Feld genutzt wird. Ich habe entsprechende Felder ergänzt. Jetzt sollte es wie erwartet funktionieren.
Update: Jason hat mich darauf aufmerksam gemacht, dass ich das zusätzliche Feld mit einem simplen Array Element hinzufügen kann. So bleiben alle Standard Felder erhalten. Der Betrag wurde entsprechend angepasst.
// Fügt die Funktion dem Standard WP Kommentar Formular hinzu
add_filter( 'comment_form_default_fields', 'webshaped_comment_form_privacy_input' );
// Die Funktion erstellt die Checkbox für das Standard WP Kommentar Formular
function webshaped_comment_form_privacy_input( $fields ) {
$req = get_option( 'require_name_email' );
$aria_req = ( $req ? " aria-required='true'" : '' );
// Elemente dem Kommentar Formular hinzufügen
$fields['datenschutz'] =
'<div class="comment-form-datenschutz"><input id="datenschutz" class="my-class" name="datenschutz" type="checkbox"' . $aria_req . ' />' .
'<label class="my-class" for="datenschutz">' . __( 'HIER KANNST DU DEN TEXT EDITIEREN > Mit der Nutzung dieses Formulars erklären Sie sich mit der Speicherung und Verarbeitung Ihrer Daten durch diese Website einverstanden. Weitere Informationen erfahren Sie in der <a href="/datenschutz">Datenschutzerklärung.</a>' ) . ( $req ? ' <span class="required">*</span>' : '' ) . '</label></div>';
return $fields;
}
Prüfen ob das Input Feld leer ist
Im nächsten Schritt prüfen wir, bevor das Formular abgeschickt wird, ob die Checkbox aktiviert wurde. Ist die Checkbox nicht betätigt worden, zeigt WordPress mit wp_die
eine Fehler-Seite mit entsprechenden Text an. Diesen kannst du in Zeile sieben hinter wp_die
anpassen.
Update: Es war nicht möglich als angemeldeter Nutzer das Formular abzuschicken. Ich habe die if Bedingung entsprechend angepasst.
add_filter( 'preprocess_comment', 'webshaped_verify_comment_meta_data' );
function webshaped_verify_comment_meta_data( $commentdata ) {
// Wenn die Checkbox leer ist und ein Gastnutzer schreiben möchte...
if ( empty( $_POST['datenschutz'] ) and ! current_user_can( 'read' ) ) {
// ... zeige folgenden Fehlertext an
wp_die( __( '<strong>FEHLER</strong>: Die Datenschutzbox wurde nicht akzeptiert.<br><br><a href="javascript:history.back()">« Zurück</a>' ) );
}
return $commentdata;
}
Beide Code Schnipsel in eure functions.php eures Themes (besser Child-Theme) kopieren. Geschafft!
Wer sich wie Jasmin an der nicht gerade hübschen Validierung von WordPress Kommentaren stört. Findet hier mein Tutorial zum Thema WordPress Comment Form Validierung mit JavaScript.
thomas
Genau das was ich gesucht hatte um meine Kommentarfunktion mit dieser Checkbox zu erweitern.
Danke!!!
Aus Isa
Wie kann man die Checkbox in einer Reihe mit dem Text setzen?
Angela
Hi, funktioniert bei mir leider gar nicht. Bei mir werden die Codes im Header angezeigt…
Habe ansonsten alles befolgt, wie du es beschrieben hast. Auch bei Deaktivierung aller Plugins bleibt der Header zerschossen.
Hast du eine Idee, woran es liegen könnte?
Gruß
Angela
Ralf
Hallo Felix, hat auf Anhieb funktioniert.
Danke!
Viele Grüße,
Ralf
Felix Scholze
Hi Ralf,
super! Dann viel Spaß mit der neuen Box 🙂
Chris
Vielen Dank für den Tipp, ich werde ihn sofort ausprobieren. Gibt es eigentlich auch Plugins um dies zu realisieren?
Felix Scholze
Hi Chris,
die gibt es sicherlich, mir ist jetzt aus dem Stehgreif keins bekannt. Meist kommen diese jedoch mit viel mehr als nur dieser kleinen Funktion. Daher mein Artikel 🙂
Dofollower
Vielen Dank für die funktion, funktioniert hervorragend… ein weitere Plugin weniger.
LG
Olena
Felix Scholze
Hi Olena,
gern geschehen 😉
Katharina
Das hat prima geklappt und war super einfach! Beim ersten neu laden der Seite hatte ich mich gewundert, dass es nicht zu sehen war – ich war aber auch noch eingeloggt… Anfängerfehler.
Apropos Anfänger und falls sich hier noch mehr davon tummeln: Ich habe natürlich erstmal „HIER KANNST DU DEN TEXT EDITIEREN“ stehen lassen, weil mir der Text dahinter zunächst gefiel. Den muss man natürlich rausnehmen und auch die href=/datenschutzerklärung ggfs. anpassen wenn die Seite anders heißt.
Vielen Dank für diese einfache und schnelle Lösung,
Katharina (von http://www.windelnundworkouts.de – jetzt mit Check-Box!)
Felix Scholze
Hi Katharina,
freut mich das alles funktioniert!
Sebastian
Das Funktioniert leider nicht.
Felix Scholze
Hallo Sebastian,
das kann so nicht ganz richtig sein. Diese Seite läuft mit dem obigen Code sowie viele weitere. Eventuell mischt sich dein Theme oder ein Plugin mit ein und verhindert die richtige Ausführung. Bekommst du einen Fehler?
Sebastian
Das ist eine gute Frage.
Nun nutze ich das PlugIn WP Comment Policy Checkbox. Hier klappt es.
Ich weiß nicht woran es liegt.
Lila
Danke für diesen Code Snippet!
Gibt es eine Möglichkeit den mit Hilfe von polylang zu übersetzen? Das Plugin findet den String nicht unter “Übersetzung von Zeichenketten”, aber ich weiß auch nicht, wie ich entsprechende Weiche in den PHP Code reinkriege. VIelleicht hat jemand eine Idee, danke!
Felix Scholze
Hallo Lila,
ich habe polylang bisher noch nicht im Einsatz gehabt. Ich gehe jedoch davon aus, dass es ähnlich wie WPML funktioniert.
Um einen Text-String innerhalb von WordPress übersetzbar zumachen, gibt es eine Reihe an Funktionen wie zum Beispiel
__( 'Mein String', 'text-domain' );
Wenn du oben in den Code guckst, wirst du mein Beispiel wieder erkennen. Mit dem kleinen Unterschied, das dort die text domain fehlt.
Wenn keine text domain gesetzt ist, wird auf den default Wert des zweiten Parameter zurückgegriffen.
Siehe:
__( string $text, string $domain = 'default' )
Ich würde dir daher raten, die text domain deines Themes oder deines Plugins einzutragen und nochmal im Polylang zu prüfen.
Wenn du mehr über Übersetzungs Funktionen in WordPress lernen willst, folge den beiden Links Link 1, Link 2.
Lila
Danke, ich werde mich damit befassen und es ausprobieren.
Ehrlich gesagt werde ich aus der Entwickler-Doku von Polylang nicht schlau. Man weiß einfach nicht, was wohin kommt und was es tut. Das Plugin ist als kostenlose Alternative zu WPML sehr verbreitet und wird mittlerweile von vielen Plugins unterstützt. Das Abomodell von WPML lohnt sich für meine Website nicht.
Felix Scholze
Ja WPML ist nicht gerade günstig. Da sollte Polylang genügen und es auch schaffen so einen einfachen String zu übersetzen. Würde mich wirklich wundern wenn das nicht klappen sollte. Was ich vergessen hatte zu erwähnen, die Text Domain ist meist der Name des Themes oder Plugins.
RedOrca
Vielen Dank für das Code Schnipsel.
Für für den Standard WordPress Kommentar funktioniert es wunderbar, leider wird die Checkbox bei den “Woocommerce Reviews” nicht angezeigt und sobald man eine Bewertung abgeben möchte erscheint die Fehlermeldung, dass die Checkbox nicht akzeptiert wurde.
Gibt es eine Möglichkeit entweder die Checkbox hier auch anzuzeigen bzw. diese für die Woocommerce Reviews zu deaktivieren?
Vielen Dank
Felix Scholze
Hallo Redorca,
schön zu hören das der Code bei dir funktioniert. Wie das ganze mit WooCommerce funktioniert, habe ich leider noch nicht getestet. Das richtige Template wird dieses sein. Wenn dein Child-Theme das entsprechende Template aufweißt, gibt es dort eine Reihe an Anpassungsmöglichkeiten.
Wenn ich die Tage Zeit finde, gucke ich mir das auf einer Test-Installation an. Sobald ich ein Ergebnis habe, werde ich den Artikel entsprechend anpassen.
Liebe Grüße aus Berlin!
RedOrca
Hallo Felix,
vielen Dank für die schnelle Antwort. Das Template meinem Child-Theme hinzuzufügen wäre kein Problem, aber ich stecke in der Materie nicht tief genug drin, um es selbst anzupassen. Wäre klasse, wenn du Zeit dafür findest.
Viele Grüße
RedOrca
Gibt es hierzu schon ein Update?
Felix Scholze
Leider habe ich dafür noch keine Zeit gefunden. Wenn es dringend ist, kannst du mir gerne eine Nachricht via E-Mail zukommen lassen.
Berthold
Spitze,
weiter so. Toll erklärt
Felix Scholze
Hallo Berthold,
vielen Dank!
Felix Scholze
Für alle Abonnenten dieses Beitrags:
Ich habe den Code dank Jasons Hilfe nochmal angepasst. Dieser sollte nun das Datenschutz Inputfeld und alle Standardfelder zeigen.
Schönen Sonntag Euch!
Daniel
Hallo danke für den super Code Funktioniert alles.
Ich möchte aber auch die checkbox haben mit der man wählen kann ob der name und email im Browser gespeichert werden sollen oder nicht.
Hast du dafür vielleicht auch noch den entsprechenden code? Weil die box verschwindet ja wenn ich deinen Code benutze.
Holger
@Daniel – ja mehr Checkboxen desto weniger Kommentare werden hinterlassen. War meine Erfahrung damit. Muss aber jeder für sich entscheiden – notwendig ist diese Box nicht
Felix Scholze
Hallo Daniel,
da kann ich Holger definitiv zustimmen. Desto mehr Checkboxen desto weniger Kommentare.
Für den Fall das du die Box doch gerne einbauen möchtest, findest du in der offiziellen WordPress Doku den entsprechenden Abschnitt: https://developer.wordpress.org/reference/functions/comment_form/
Hier der Anfang der Funktion (Zeile 2324) –>
if ( has_action( 'set_comment_cookies', 'wp_set_comment_cookies' ) && get_option( 'show_comments_cookies_opt_in' ) ) {
$consent = empty( $commenter['comment_author_email'] ) ? '' : ' checked="checked"';
Holger
Beide Codes eingefügt und funktioniert – Danke!
Wie machst du das mit dem Mouseover und aktivieren der Checkbox?
Felix Scholze
Hallo Holger,
freut mich das dir mein Code weiter hilft. Das Design der Checkbox was du sicherlich meinst ist mit CSS erstellt worden. Hier habe ich den Befehl box-shadow genutzt.
Beste Grüße Felix
Marie
Hallo Felix,
zunächst einmal vielen Dank für die Anleitung. Toll, dass Du das mit uns teilst und somit ein Plug-in weniger eingesetzt werden muss. Es funktioniert super. Ich habe nur den Code für das Standardfeld “url” herausgenommen, da ich keine Website abfrage.
Gibt es aber eine Lösung, die Labels für “Name” und “Email” anstatt über den Feldern innerhalb der Felder anzeigen zulassen? Das war nämlich standardmäßig in meinem Theme so, aber mit Deinem Code wird das leider überschrieben.
Liebe Grüße
Marie
Felix Scholze
Hallo Marie,
die hier erklärte Funktion überschreibt die WordPress eigene, das findet dein WP Theme wohl nicht so toll. Jedes Theme wird sich wohl etwas anders verhalten. Da ich dein Theme leider nicht kenne, kann ich an dieser Stelle leider nur Vermutungen anstellen.
Wenn du etwas Erfahrung mit HTML und PHP mitbringst kannst du im array $fields das HTML so umformen das entsprechende Labels oberhalb verschwinden. Dazu musst du den p und label tag raus löschen. Den Platzhalter im Feld bekommst du über das Attribut placeholder=”” im entsprechenden input tag.
Dir noch einen schönen Sonntag!
Jasmin
hi Felix,
Danke für deine Lösung.
Womit ich noch ein Problem habe ist, wenn ich die Checkbox nun vergesse zu klicken macht WP eine dämliche neue Seite auf, statt unten einfach zu sagen, Du hast die Checkbox vergessen. Klicke ich auf dieser neuen Seite zurück, ist mein Kommentar verloren. Gibt es eine Möglichkeit, das zu verhindern?
Schönes WE,
Jasmin
Felix Scholze
Hallo Jasmin,
ja die Möglichkeit gibt es.
Im Absatz “Prüfen ob das Input Feld leer ist”, gibt es eine If-Abfrage die prüft ob die Datenschutzcheckbox aktiviert wurde. In der Abfrage ist definiert was passieren sollen wenn das nicht der Fall ist.
Zeile 5 und 6 kannst du löschen und mit deiner eigenen Funktion austauschen.
Ich hoffe ich konnte dir helfen.
Beste Grüße aus Berlin
Felix
Jan
Hallo Felix,
danke für den Code. Wirklich danke!
Ich habe nur eine kurze Frage. Angenommen das Theme wird aktualisiert. Ist der Code dann nicht normalerweise weg?
Gruß,
Jannes
Felix Scholze
Hi Jannes,
freut mich das dir der Code hilft.
Ich kann generell nicht empfehlen irgendwelche Änderung am Parent Theme zu tätigen (Alle Änderungen werden beim Update des Themes überschrieben). Dafür sind Child Themes gedacht, gibt es sicherlich auch für dein Theme bzw. kann man sich recht leicht selbst erstellen.
Beste Grüße
Felix
Gerald
Hallo Felix,
Danke für die Anleitung.
Wenn ich die beiden Funktionen in die functions.php vom Child-Theme (oder auch vom Parent-Theme) einbinde, dann schaut das bei uns folgendermaßen aus: http://prntscr.com/ll1stc
Hast du eine Ahnung, was hier angepasst werden muss bzw falsch läuft?
Danke & LG Gerald
Felix Scholze
Hi Gerald,
auf den ersten Blick sieht das nach “falsch” gesetzten CSS Regeln aus. Anhand des Screenshots kann ich leider nur spekulieren. Jedes Theme bringt natürlich unterschiedliche Funktionen und Voraussetzungen mit.
Beste Grüße,
Felix
Gerald
Alles klar, dann lass ich das mal von unserem Designer checken. Danke!
Felix Scholze
Mach das mal, kannst mir gerne nochmal Feedback geben woran es lag.
A.
TOP – Super Anleitung – Super Hilfe
Vielen Dank
Felix Scholze
Hallo A.,
freut mich dir helfen zu können.
Sascha
Hallo Felix,
vielen Dank für die sehr schnelle Reaktion und Anpassung.
Erste Tests schauen gut aus, es scheint nun zu funktionieren.
Felix Scholze
Hi Sascha,
das freut mich!
Sascha
Hallo Felix,
wenn ich Deine Checkbox in eine WP-Seite einbaue, dann verschwinden die dort bisher angezeigten Felder für Name, Webseite und E-Mail.
Hast Du eine Idee wieso?
Gruß,
Sascha
Felix Scholze
Hi Sascha,
nicht direkt, ich habe aber eine mögliche Lösung die ich direkt einmal testen werden. Ich schreibe Sie entweder hier in den Kommentar-Bereich oder ergänze oben den Beitrag. Vielen Dank für den Hinweis.
Felix Scholze
Ich habe den Beitrag angepasst. Bitte beide Code Schnipsel noch einmal kopieren und einfügen.
Jason
Wenn man sich die Dokumentation nur einmal anschaut weiss man sofort warum.
Hier wird/wurde im Code-Beispiel nicht der Fields-Array gefiltert (wie es in einer Filter!-Funktion vorgesehen wäre..) sondern überschrieben .
Vermutlich war es vorher eben dann nur noch ein Feld…
Schaut man sich also erstmal an, was man hier bearbeitet (https://developer.wordpress.org/reference/functions/comment_form/ und https://developer.wordpress.org/reference/hooks/comment_form_default_fields/) sieht man sofort, dass man hier einfach nur ein Array-Element hinzufügen müsste. bspw. per $fields[‘datenschutz’] = ”; oder von mir aus auch über ecken mit einem neuen Array und einem array_merge.
Dann gäbe es auch keine Probleme und man müsste nicht die WordPress-Eigenen Defaults neu definieren und noch mehr Fehlermöglichkeite aufmachen. 😉
Felix Scholze
Hi Jason,
uh da liegst du komplett richtig. Da ist mir wohl eine schwerer Fehler unterlaufen. Vielen Dank für Deinen ausführlichen Kommentar. Ich habe den Code entsprechend angepasst.
Ich wünsche Dir einen schönen Sonntag!
Jason
Hallo Felix.
Kein Thema. Unter anderem ist es ja dafür quelloffen, dass alle dran werkeln und verbessern können 😉
Jetzt sieht das snippet auch wesentlich lesbarer und nachvollziehbarer aus.
Sehr guter Beitrag der mir ebenfalls in die richtige Richtung geholfen hat.
Felix Scholze
Da hast du Recht wesentlich lesbarer.
Freut mich das ich dir helfen konnte!