La configurazione di default di WooCommerce, non prevede l’inserimento della checkbox della privacy Policy, all’interno del form di registrazione.
Per essere a norma con il GDPR è necessario inserire questo campo ed è fondamentale che gli utenti ti diano il consenso alla Privacy Policy (ti consiglio Iubenda per generare una Privacy Policy e Cookie Policy nel modo corretto).
Se l’utente non metterà il flag al campo della Privacy Policy otterrà un errore e non potrà effettuare la registrazione.
Per fare ciò potremmo anche usare un plugin specifico, ma dato che sono necessarie veramente poche righe di codice, è inutile andare ad appesantire il sistema senza motivo.
Per mostrare il campo inserire questo codice all’interno del file functions.php:
//Aggiungo il campo checkbox
add_action('woocommerce_register_form', 'aggiungere_campo_privacy_policy_registrazione', 11);
function aggiungere_campo_privacy_policy_registrazione() {
woocommerce_form_field( 'privacy_policy_reg', array(
'type' => 'checkbox',
'class' => array('form-row privacy'),
'label_class' => array('woocommerce-form__label woocommerce-form__label-for-checkbox checkbox'),
'input_class' => array('woocommerce-form__input woocommerce-form__input-checkbox input-checkbox'),
'required' => true,
'label' => 'Accetto le condizioni descritte nella <a href="/privacy-policy">Privacy Policy</a>.',
));
}
Invece, per impostare il controllo sulla validazione del campo inserire questo codice all’interno del file functions.php subito al di sotto del precedente:
//Effettuo il controllo sul campo se l'utente non mette il flag
add_filter( 'woocommerce_registration_errors', 'messaggio_errore_flag_privacy_registrazione', 10, 3 );
function messaggio_errore_flag_privacy_registrazione( $errors, $username, $email ) {
if ( ! is_checkout() ) {
if ( ! (int) isset( $_POST['privacy_policy_reg'] ) ) {
$errors->add( 'privacy_policy_reg_error', __( 'È necessario accettare il <b>trattamento dei dati personali.</b>', 'woocommerce' ) );
}
}
return $errors;
}
Per nascondere il testo di default di WooCommerce per la Privacy Policy aggiungere questa regola css
.woocommerce-privacy-policy-text {
display: none;
}
Come funziona il codice?
La prima parte di codice serve semplicemente per inserire il campo checkbox.
Alla riga 12 possiamo modificare il testo che appare in corrispondenza della checkbox e dobbiamo ricordarci di sostituire il link <a href=”/link-privacy-policy”> con il nostro, ovvero quello che punta effettivamente alla Privacy Policy.
Per esempio: <a href=”/privacy-policy”> se è una pagina interna al nostro sito oppure <a href=”https://iubenda-link-privacy-policy”> se è un link esterno che genera la Privacy Policy.
Nella seconda parte di codice invece, viene effettuato il controllo sul campo, per evitare che, se l’utente non mette il flag, non possa proseguire.
Alla riga 7 possiamo modificare il testo di errore che appare se l’utente non mette il flag.
Avete soluzioni differenti? Commentate e discutiamone insieme!



13 commenti su “WooCommerce: Aggiungere checkbox Privacy Policy Form Registrazione”
Ciao, non sono molto esperto di php, per aggiungere 2 checkbox basta duplicare il codice oppure all’interno del codice sopraindicato si può direttamente raddoppiare lì? grazie mille
Ciao Disma,
ti conviene duplicare il codice.
Fai esattamente così:
– Usi il codice presente nell’articolo per inserire la PRIMA checkbok
– Per aggiungere la SECONDA fai un duplicato esatto del codice precedente, ma devi cambiare il nome della funzione, altrimenti da errore, in questo modo:
//Aggiungo il campo checkbox add_action('woocommerce_register_form', 'aggiungere_secondo_campo', 11); function aggiungere_secondo_campo() { woocommerce_form_field( 'privacy_policy_reg', array( 'type' => 'checkbox', 'class' => array('form-row privacy'), 'label_class' => array('woocommerce-form__label woocommerce-form__label-for-checkbox checkbox'), 'input_class' => array('woocommerce-form__input woocommerce-form__input-checkbox input-checkbox'), 'required' => true, 'label' => 'Accetto le condizioni descritte nella <a href="/privacy-policy">Privacy Policy</a>.', )); }//Effettuo il controllo sul campo se l'utente non mette il flag add_filter( 'woocommerce_registration_errors', 'messaggio_errore_flag_secondo_campo', 10, 3 ); function messaggio_errore_flag_secondo_campo( $errors, $username, $email ) { if ( ! is_checkout() ) { if ( ! (int) isset( $_POST['privacy_policy_reg'] ) ) { $errors->add( 'privacy_policy_reg_error', __( 'È necessario accettare il <b>trattamento dei dati personali.</b>', 'woocommerce' ) ); } } return $errors; }Come vedi ho aggiunto una nuova funzione dal nome “aggiungere_secondo_campo” che aggiunge appunto il secondo campo checkbox e l’altra, ovvero “messaggio_errore_flag_secondo_campo”, che controlla il campo appena aggiunto.
Poi a tua discrezione all’interno delle nuove funzioni puoi correggerti i messaggi di errore.
Fammi sapere se funziona.
Ciao, innanzitutto grazie mille per la risposta. Allora, ci ho provato e i campi che appaiono sono effettivamente due. Però il problema è che fa registrare l’utente anche se ne flagga solo uno dei due. C’è qualcosa che non quadra e non capisco cosa, anche perché non capisco niente di PHP e non vedo come potrei capirlo 😀
Ti incollo qui sotto tutto il codice che ho inserito sia per la prima che per la seconda checkbox, non so se vedi un errore ti erigo un busto
//Aggiungo il campo checkbox
add_action(‘woocommerce_register_form’, ‘aggiungere_campo_privacy_policy_registrazione’, 11);
function aggiungere_campo_privacy_policy_registrazione() {
woocommerce_form_field( ‘privacy_policy_reg’, array(
‘type’ => ‘checkbox’,
‘class’ => array(‘form-row privacy’),
‘label_class’ => array(‘woocommerce-form__label woocommerce-form__label-for-checkbox checkbox’),
‘input_class’ => array(‘woocommerce-form__input woocommerce-form__input-checkbox input-checkbox’),
‘required’ => true,
‘label’ => ‘Confermo la presa visione dell’Informativa Privacy del presente sito ed acconsento al trattamento dei miei dati personali per le finalità proprie dello stesso, ossia per l’acquisto ed il delivery, tramite la piattaforma e-commerce ed il provider di pagamento online, di bevande alcoliche e accetto tutte le condizioni descritte nella Privacy Policy.’,
));
}
//Effettuo il controllo sul campo se l’utente non mette il flag
add_filter( ‘woocommerce_registration_errors’, ‘messaggio_errore_flag_privacy_registrazione’, 10, 3 );
function messaggio_errore_flag_privacy_registrazione( $errors, $username, $email ) {
if ( ! is_checkout() ) {
if ( ! (int) isset( $_POST[‘privacy_policy_reg’] ) ) {
$errors->add( ‘privacy_policy_reg_error’, __( ‘È necessario accettare il trattamento dei dati personali.‘, ‘woocommerce’ ) );
}
}
return $errors;
}
//Aggiungo il campo checkbox
add_action(‘woocommerce_register_form’, ‘aggiungere_secondo_campo’, 11);
function aggiungere_secondo_campo() {
woocommerce_form_field( ‘privacy_policy_reg’, array(
‘type’ => ‘checkbox’,
‘class’ => array(‘form-row privacy’),
‘label_class’ => array(‘woocommerce-form__label woocommerce-form__label-for-checkbox checkbox’),
‘input_class’ => array(‘woocommerce-form__input woocommerce-form__input-checkbox input-checkbox’),
‘required’ => true,
‘label’ => ‘Dichiaro di essere maggiorenne e di accettare le condizioni generali di vendita.’,
));
}
//Effettuo il controllo sul campo se l’utente non mette il flag
add_filter( ‘woocommerce_registration_errors’, ‘messaggio_errore_flag_secondo_campo’, 10, 3 );
function messaggio_errore_flag_secondo_campo( $errors, $username, $email ) {
if ( ! is_checkout() ) {
if ( ! (int) isset( $_POST[‘privacy_policy_reg’] ) ) {
$errors->add( ‘privacy_policy_reg_error’, __( ‘È necessario essere maggiorenni e accettare le condizioni generali di vendita.‘, ‘woocommerce’ ) );
}
}
return $errors;
}
Ciao, grazie mille per l’aiuto. Non riesco a far funzionare totalmente la cosa, nel senso che basta flaggare uno dei due e non dà errore, mentre dovrebbe funzionare che anche se solo uno dei due non è flaggato da errore. Volevo incollarti qui il codice per chiederti cosa c’è di sbagliato, ma il sistema mi prende per uno spammer e non me lo fa fare 😀
Metti il codice tra i tag php /php e dovrebbe fartelo inserire, esattamente cosi:
Esempio:
Ciao ho provato ma il checkbox non compare
Ciao, ottieni qualche errore?
Ciao,
ho provato ma anche a me il checkbox non compare, però non ho nessun errore di sintassi o altro. Dal frontend compare tutta la dicitura ma senza checkbox da flaggare.
Ciao Mimmo,
ho appena provato su un sito di un mio cliente e la checkbox appare senza problemi.
Mi posti qui il codice completo? Così vedo se ci sono errori o/e sfuggito qualcosa.
Ciao! Ho provato anche io seguendo la guida passo passo a inserire il codice nel mio sito, ma non appaiono le due checkbox. Facendo fatica a trovare il file il file functions.php (ho cercato ovunque su internet su dove trovarlo ma non c’è verso di capire dove posso trovarlo) ho optato per l’utilizzo di un plugin chiamato “My Custom Functions”, inserendo il codice che hai scritto. Tuttavia non ottengo risultati. Spero tu possa aiutarmi 😀
Ciao Cristopher,
ho appena provato su un sito di un mio cliente e la checkbox appare senza problemi.
E’ facile trovare il file functions.php, è meglio non installare un plugin per questo. 😉
Lo trovi all’interno della cartella del tuo tema, esattamente così: wp-content/themes/NOME-DEL-TEMA-CHE-USI/functions.php.
Sarebbe opportuno però che tu abbia un tema child, in questo modo, se aggiorni il file segnalato con funzioni personalizzate, all’aggiornamento del tema, non le perdi.
Qui spiego come fare: Tema Child WordPress : cos’è e perchè dovresti utilizzarlo
Spero sia utile!
ma una volta creato il tema child quale file function.php devo modificare in modo che agli aggiornamenti rimanga la modifica, quello child o quello del tema originario ?
perchè modificando il file da quello child mi va down tutto il sito
Buongiorno Emiliano grazie per questo tutorial semplicissimo. Ho aggiunto le stringhe e funzionano perfettamente volevo chiederti se è possibile far apparire il checkbox sotto il testo di default di WooCommerce per la Privacy Policy. Mettendo il codice appare sopra e penso che per essere completamente in regola la checkbox deve essere sotto il testo. Spero in una tua risposta e ti auguro una buona giornata.