Hallo zusammen,
ich möchte die automatischen Cookies von WordPress deaktivieren und auch auf einen generellen Cookie-Info-Banner verzichten.
Dabei möchte ich aber auch auf den Komfort nicht komplett verzichten, so dass die Kommentatoren-Infos (Name, E-Mail, URL) auf Wunsch gespeichert werden.
neben Verbesserungsvorschlägen freue ich mich auch auf Rückmeldungen von anderen, die an dem fertigen Snippet interessiert sind.
Meine Vorstellung:
- Eine Checkbox, die man aktiv anklicken muss, um Kommentar-Cookies zu aktivieren [COLOR=#008000](funktioniert)[/COLOR]
- Wenn diese Checkbox angeklickt wurde, wird dies in einem Cookie gespeichert, so dass die Checkbox in Zukunft von vorneherein angehakt ist [COLOR=#ff0000](funktioniert nicht ganz)[/COLOR]
- Wird die Checkbox nicht angeklickt, werden keine Cookies gespeichert [COLOR=#008000](funktioniert)[/COLOR]
- Wird der Haken in der Checkbox aktiv weggeklickt, werden die Cookies mit Abschicken des Kommentars gelöscht [COLOR=#008000](funktioniert)[/COLOR]
- Die Lebenszeit der Cookies wird auf eine Stunde reduziert [COLOR=#ff0000](funktioniert nicht)[/COLOR]
Mit meinem derzeitigen Snippet für das "Code Snippets"-Plugin klappt das bisher leider noch nicht so recht (siehe unten "Noch Offenes"):
add_filter('comment_form_default_fields','sb_add_comment_fields');
function sb_add_comment_fields($fields) {
$sb_commentcookies_checked === '';
if( isset($_COOKIE['sb_commentcookies_' . COOKIEHASH]) ) {
$sb_commentcookies_checked === 'checked="checked" ';
}
$fields['sb_commentcookies'] = '<p class="sb_commentcookies">
<label for="sb_commentcookies">
<input type="checkbox" ' . $sb_commentcookies_checked . 'value="yes" id="sb_commentcookies" name="sb_commentcookies" />
Kommentar-Komfort-Cookies für 1 Stunde speichern.
</label></p>';
return $fields;
}
add_filter( 'preprocess_comment', 'sb_verify_commentcookies' );
function sb_verify_commentcookies( $commentdata ) {
if ( ! is_user_logged_in() ) {
$secure = ( 'https' === parse_url( home_url(), PHP_URL_SCHEME ) );
if ( ! isset( $_POST['sb_commentcookies'] ) ) {
remove_action( 'set_comment_cookies', 'wp_set_comment_cookies' );
if( isset($_COOKIE['comment_author_' . COOKIEHASH]) ) {
unset( $_COOKIE['comment_author_' . COOKIEHASH] );
setcookie( 'comment_author_' . COOKIEHASH, '', time() - 60000, COOKIEPATH, COOKIE_DOMAIN, $secure );
}
if( isset($_COOKIE['comment_author_email_' . COOKIEHASH]) ) {
unset( $_COOKIE['comment_author_email_' . COOKIEHASH] );
setcookie( 'comment_author_email_' . COOKIEHASH, '', time() - 60000, COOKIEPATH, COOKIE_DOMAIN, $secure );
}
if( isset($_COOKIE['comment_author_url_' . COOKIEHASH]) ) {
unset( $_COOKIE['comment_author_url_' . COOKIEHASH] );
setcookie( 'comment_author_url_' . COOKIEHASH, '', time() - 60000, COOKIEPATH, COOKIE_DOMAIN, $secure );
}
if( isset($_COOKIE['sb_commentcookies_' . COOKIEHASH]) ) {
unset( $_COOKIE['sb_commentcookies_' . COOKIEHASH] );
setcookie( 'sb_commentcookies_' . COOKIEHASH, '', time() - 60000, COOKIEPATH, COOKIE_DOMAIN, $secure );
}
} else {
setcookie( 'comment_author_' . COOKIEHASH, 'yes', time() + 3600, COOKIEPATH, COOKIE_DOMAIN, $secure );
setcookie( 'comment_author_email_' . COOKIEHASH, 'yes', time() + 3600, COOKIEPATH, COOKIE_DOMAIN, $secure );
setcookie( 'comment_author_url_' . COOKIEHASH, 'yes', time() + 3600, COOKIEPATH, COOKIE_DOMAIN, $secure );
setcookie( 'sb_commentcookies_' . COOKIEHASH, 'yes', time() + 3600, COOKIEPATH, COOKIE_DOMAIN, $secure );
}
return $commentdata;
}
}
Alles anzeigen
[size=14]Noch Offenes[/SIZE]
Cookie-Checkbox aktiviert lassen:
Es wird zwar korrekt das "sb_commentcookie_HASH"-Cookie gespeichert, aber die Checkbox bleibt trotzdem leer. Beim Code gleich zu Beginn mit if( isset($_COOKIE['sb_commentcookies_' . COOKIEHASH]) ) scheint also noch etwas nicht ganz zu stimmen.
Cookie-Lebenszeit reduzieren:
Meine alternative "Krücke" (ganz am Ende) mit den drei Zeilen "setcookie" für die drei Cookies mit manueller Angabe von "time() + 3600" lässt die Lebenszeit unverändert. Lediglich mein eigener "sb_commentcookie"-Cookie wird korrekt mit einer Stunde Laufzeit gespeichert.
Ersetze ich diese drei Zeilen mit "add_filter('comment_cookie_lifetime', 3600);", dann wird nur mein "sb_commentcookie"-Cookie gespeichert.
[HR][/HR]
[size=14]Weitere Wünsche[/SIZE]
Daran werde ich mich begeben, wenn die obigen Punkte funktionieren. Wer hierfür bereits Vorschläge machen möchte, immer gerne.
Moderationsinfo für Cookie-deaktivierte Kommentare:
Ist die Checkbox deaktiviert und der Kommentar landet in der Moderation (z.B. wegen Spamverdacht), dann lädt die Seite neu mit Anker zu diesem Kommentar, der aber nicht funktioniert, da der Kommentar mangels Cookies nicht angezeigt wird. Was aber noch viel ärgerlicher ist: Dass keine Kommentar-Statusinfo angezeigt wird. So denkt der Kommentator, sein Beitrag wäre verloren gegangen und er müsste ihn erneut schreiben.
Hier muss auf jeden Fall noch die Info eingeblendet werden, dass der Kommentar noch freigeschaltet werden muss. Optimal wäre natürlich, wenn hier auch noch der Kommentar an sich angezeigt wird (also das geliche Verhalten wie mit Cookies). Wobei das für meine PHP-Kenntnisse wohl zu kompliziert ist.
Kompatibilität erweitern:
Außerdem möchte ich noch die Checkbox mit dem "Simple Comment Editing"-Plugin kompatibel machen.
[HR][/HR]
Zur Info: Das ganze läuft derzeit bei mir lokal per XAMPP mit deaktiviertem Cache-Plugin.
Grundlagen für mein Snippet:
- Isabel Castillo: Add Checkbox Input To WordPress Comment Reply Form (2017)
- Stack Exchange: How to add a privacy-checkbox in comment-template? (2013)
- WMPU DEV: Cookies and WordPress: How to Set, Get and Delete (2017)
- Stack Overflow: WordPress Cookie Security - Persistent Cookie comment_author change to session cookie (2016)
- Stack Overflow: How can I set, get and destroy cookies in Wordpress? (2015)
- Azuila Designs: Disable Comment Cookies in WordPress (2012)