Come aggiungere checkbox al form commenti WordPress

Come aggiungere checkbox al form commenti WordPress

Il form dei commenti sui siti WordPress, in conformità con la nuova normativa europea sulla privacy (GDPR), dovrebbe contenere un checkbox per consentire, agli utenti che inseriscono i propri dati, l’accettazione dell’informativa sulla privacy.

Il codice che andremo ad implementare nel file functions.php è il seguente:

tratto dal sito di Simone Alati (mi è stato utilissimo per risolvere rapidamente il problema su diversi siti).

<?php
/**
 * aggiungo il checkbox privacy in coda di campi di default del form dei commenti
 */
add_action( 'comment_form_logged_in_after', 'comment_form_additional_fields' );
add_action( 'comment_form_after_fields', 'comment_form_additional_fields' );
function comment_form_additional_fields() {
    $commenter = wp_get_current_commenter();
	$req = get_option( 'require_name_email' );
	$aria_req = ( $req ? " aria-required='true'" : '' );
    echo '<p class="privacy-container"><input id="privacy" name="privacy" type="checkbox"' . $aria_req . ' value="si"><small> <a href="' . get_theme_mod('cabi_privacy') . '">' . __('I have read the privacy policy</a> and I accept the treatment of my personal data in compliance with the Italian Legislative Decree 196/2003.') . '</small></p>';
}


//salvo il valore del campo privacy come meta del commento
add_action( 'comment_post', 'save_comment_form_additional_fields' );
function save_comment_form_additional_fields($comment_id) {
    if (isset($_POST['privacy']) && $_POST['privacy'] == 'si') {
        $privacy = wp_filter_nohtml_kses($_POST['privacy']);
        add_comment_meta($comment_id, 'privacy', $privacy);
    }
}


//impedisco il salvataggio del commento se non è stato flaggato il checkbox privacy
//questa funzione è un fallback se non è attivo javascript
add_filter( 'preprocess_comment', 'verify_comment_form_data' );
function verify_comment_form_data($commentdata) {
  if (!isset($_POST['privacy']) || $_POST['privacy'] != 'si') 
  wp_die( __( '<strong>Error</strong>: You have to accept the privacy policy to proceed. Hit the <em>Back</em> button on your Web browser and resubmit your comment with privacy policy flag checked.' ) );
  return $commentdata;
}


//impedisco l'invio del form dei commenti se non si flagga la checkbox privacy
add_action('wp_footer','validate_privacy_comment_form_javascript');
function validate_privacy_comment_form_javascript(){
    if (is_single() && comments_open()){
        ?>
        <script type="text/javascript">
        jQuery(document).ready(function($){
            $(".comment-form #submit").on('click', function(e){
                if (!$('#privacy').is(':checked')){
                  e.preventDefault();
                  return false;
                }
            });
        });
        </script>
        <?php
    }
}


//aggiugo un metabox al template dei commenti nel backend 
add_action( 'add_meta_boxes_comment', 'extend_comment_add_meta_box' );
function extend_comment_add_meta_box() {
    add_meta_box( 'comment_meta_box', __( 'Additional fields' ), 'extend_comment_meta_box', 'comment', 'normal', 'high' );
}


//recupero i dati e li mostro nel metabox
function extend_comment_meta_box($comment) {
    $privacy = get_comment_meta( $comment->comment_ID, 'privacy', true );
    //aggiungo al metabox un campo nascosto con valore random
    wp_nonce_field( 'extend_comment_update', 'extend_comment_update', false );
    ?>
    <p>
        <?php _e('Agreed with privacy policy') ?>
        <input type="checkbox" id="privacy" name="privacy" <?php if ($privacy && $privacy == 'si') echo "checked=\"checked\" value=\"{$privacy}\"" ?>>
    </p>
    <?php
}

//salvo i dati aggiuntivi del metabox
add_action( 'edit_comment', 'save_extended_comment_data' );
function save_extended_comment_data($comment_id) {
    //se non ricevo il campo nascosto di sicurezza non eseguo l'aggiornamento
    if(!isset($_POST['extend_comment_update']) || !wp_verify_nonce($_POST['extend_comment_update'], 'extend_comment_update')) return;
    if (isset($_POST['privacy']) && $_POST['privacy'] == 'on') {
        //$privacy = wp_filter_nohtml_kses($_POST['privacy']);
        update_comment_meta( $comment_id, 'privacy', 'si');
    } else {
        update_comment_meta( $comment_id, 'privacy', 'no');
    }
}

Sperando che questo articolo di possa essere utile per farti essere in conformità con il GDPR, ti auguro buon lavoro.

2 commenti su “Come aggiungere checkbox al form commenti WordPress”

  1. Buongiorno,
    ho provato a seguire la vostra guida per aggiungere la checkbox sul mio sito, ma quando incollo il codice nel functions.php mi viene restituito un errore di sintassi quindi non riesco a salvare. L’errore mi vene indicato qui: ?glt;
    non so se però me ne segnala altri.
    Potete aiutarmi?

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.

Torna in alto