Se vogliamo approfondire di più su i sottoscritori del nostro Sito Web oppure se abbiamo la necessità di avere dati aggiuntivi per ad esempio: una campagna di marketing, può essere utile aggiungere un campo personalizzato o più campi al form di registrazione WordPress.
Come?
Nel mio caso ho aggiunto alcuni dati essenziali per il mio Sito Web nel form registrazione e sono: Nome, Cognome, Nickname e il Consenso alla Privacy Policy (Obbligatoria per tutti i Siti), ovviamente nel vostri form potete inserire molti altri campi obbligatori secondo le vostre necessità ma per rendervi la cosa più comprensibile in questa guida, mi soffermerò solo su i campi su i quattro campi che ho aggiunto io nel mio form. Se siete ferrati nel maneggiare un po’ di codice potete utilizzare o modificare questo codice in base alle vostre necessità, come dicevo poc’anzi.
Il codice che troverete in questa guida dovrà essere inserito all’interno di un file che chiamerete ad es. custom_form.php e il medesimo file all’interno di una directory che dovrete creare, è simile a quella dei plugins in Wp-Content e che si chiamerà mu-plugins (Must Use Plugins), a breve ci sarà una guida anche su i mu-plugins.
1. Come posso aggiungere un nuovo elemento al form?
Dobbiamo aggiungere un nuovo elemento al form di registrazione come primissima cosa dare fare e per ottenere il nostro risultato dobbiamo utilizzare l’Hook di register_form, dopodiché creiamo nuovi campi input per i nostri dati aggiuntivi.
<?php add_action('register_form','myplugin_register_form'); function myplugin_register_form (){ $first_name = ( isset( $_POST['first_name'] ) ) ? $_POST['first_name']: ''; // Saving the First Name field $last_name = ( isset( $_POST['last_name'] ) ) ? $_POST['last_name']: ''; // Saving the Last Name field $nickname = ( isset( $_POST['nickname'] ) ) ? $_POST['nickname']: ''; // Saving the Nickname field $privacyPolicy = ( isset( $_POST['privacy_policy'] ) ) ? $_POST['privacy_policy']: '0'; // Saving the Privacy Policy field if (get_locale() == 'it_IT') { ?> <p> <label for="first_name"><?php _e('Nome','registrazione-utenti') ?><br /> <input type="text" name="first_name" id="first_name" class="input" value="<?php echo esc_attr(stripslashes($first_name)); ?>" size="25" /></label> </p> <p> <label for="last_name"><?php _e('Cognome','registrazione-utenti') ?><br /> <input type="text" name="last_name" id="last_name" class="input" value="<?php echo esc_attr(stripslashes($last_name)); ?>" size="25" /></label> </p> <p> <label for="nickname"><?php _e('Nickname','registrazione-utenti') ?><br /> <input type="text" name="nickname" id="nickname" class="input" value="<?php echo esc_attr(stripslashes($nickname)); ?>" size="25" /></label> </p> <br> <p> <input type="checkbox" name="privacy_policy" value="1" aria-invalid="false" <?php if ($privacyPolicy == "1") { echo "checked"; } else { echo ""; } ?>></span></span></span> ACCETTO I <a href="https://www.sviluppomania.com/it/termsconditions/">TERMINI E CONDIZIONI D'USO</a> E L'<a href="https://www.sviluppomania.com/it/privacy/">INFORMATIVA SULLA PRIVACY</a>.</p> <br><br> </p> <?php } else { ?> <p> <label for="first_name"><?php _e('First Name','registrazione-utenti') ?><br /> <input type="text" name="first_name" id="first_name" class="input" value="<?php echo esc_attr(stripslashes($first_name)); ?>" size="25" /></label> </p> <p> <label for="last_name"><?php _e('Last Name','registrazione-utenti') ?><br /> <input type="text" name="surname" id="last_name" class="input" value="<?php echo esc_attr(stripslashes($last_name)); ?>" size="25" /></label> </p> <p> <label for="nickname"><?php _e('Nickname','registrazione-utenti') ?><br /> <input type="text" name="nickname" id="nickname" class="input" value="<?php echo esc_attr(stripslashes($nickname)); ?>" size="25" /></label> </p> <br> <p> <input type="checkbox" name="privacy_policy" value="1" aria-invalid="false" <?php if ($privacyPolicy == "1") { echo "checked"; } else { echo ""; } ?>></span></span></span> I ACCEPT THE <a href="https://www.sviluppomania.com/en/termsconditions/">TERMS AND CONDITIONS OF USE</a> AND THE <a href="https://www.sviluppomania.com/en/privacy/">PRIVACY POLICY</a>.</p> <br><br> </p> <?php } }
All’interno del codice troverete anche una suddivisione per multilingua con il Plugin Qtranslate-X, il codice in questione è:
if (get_locale() == 'it_IT') { <?php } else { ?> <?php }
Se non vi serve questo codice multilingua per il Plugin sopracitato vi basterà eliminare tutto il codice che comprende da <?php } else { ?> fino a <?php } ed eliminare anche if (get_locale() == ‘it_IT’) { così rimarrà solo il codice per la lingua italiana, troverete altri pezzi di codice più avanti ma se seguite il nostro consiglio vi rimarrà solo quello in italiano.
2. Come validare i dati inseriti?
Non serve solo inserire i dati ma effettuare dei controlli anche sulla validazione (nel nostro caso Nome, Cognome, Nickname e PrivacyPolicy), dovremmo utilizzare l’Hook registration_errors, in questo modo controllermo il campo affinché non sia vuoto in quanto dovrà essere obbligatorio. A seconda delle vostro necessità potete eseguire qualsiasi controllo sui dati inseriti.
add_filter('registration_errors', 'myplugin_registration_errors', 10, 3); function myplugin_registration_errors ($errors, $sanitized_user_login, $user_email) { if ( empty( $_POST['first_name'] ) ) // The First Name field is mandatory and can not be empty { if (get_locale() == 'it_IT') { $errors->add( 'first_name_error', __('<strong>ERROR</strong>: Devi inserire il tuo Nome','registrazione-utenti') ); } else { $errors->add( 'first_name_error', __('<strong>ERROR</strong>: Please, type your first name ','registrazione-utenti') ); } } if ( empty( $_POST['last_name'] ) ) // The Last Name field is mandatory and can not be empty { if (get_locale() == 'it_IT') { $errors->add( 'last_name_error', __('<strong>ERROR</strong>: Devi inserire il tuo Cognome','registrazione-utenti') ); } else { $errors->add( 'last_name_error', __('<strong>ERROR</strong>: Please, type your last name','registrazione-utenti') ); } } if ( empty( $_POST['nickname'] ) ) // The Nickname field is mandatory and can not be empty { if (get_locale() == 'it_IT') { $errors->add( 'nickname_error', __('<strong>ERROR</strong>: Devi inserire il tuo Nickname','registrazione-utenti') ); } else { $errors->add( 'nickname_error', __('<strong>ERROR</strong>: Please, type your nickname','registrazione-utenti') ); } } if ( empty( $_POST['privacy_policy'] ) || $_POST['privacy_policy'] != "1") // Consent to the Privacy Policy is mandatory { if (get_locale() == 'it_IT') { $errors->add( 'privacy_policy_error', __('<strong>ERROR</strong>: Devi accettare l\'informativa sulla privacy','registrazione-utenti') ); } else { $errors->add( 'privacy_policy_error', __('<strong>ERROR</strong>: Please, agree with the l\'Privacy Policy','registrazione-utenti') ); } } return $errors; }
3. Come salvare i dati dell’utente che si è appena registrato?
I nuovi metadati per il nuovo utente devono essere salvati, utilizzando l’Hook user_register. L’Hook ci permette di avere accesso alle informazioni del nuovo utente subito dopo esser stato aggiunto al Database.
add_action('user_register', 'myplugin_user_register'); function myplugin_user_register ($user_id) { if ( isset( $_POST['first_name'] ) ) update_user_meta($user_id, 'first_name', $_POST['first_name']); if ( isset( $_POST['last_name'] ) ) update_user_meta($user_id, 'last_name', $_POST['last_name']); if ( isset( $_POST['nickname'] ) ) update_user_meta($user_id, 'nickname', $_POST['nickname']); if ( isset( $_POST['privacy_policy'] ) ) update_user_meta($user_id, 'privacy_policy', $_POST['privacy_policy']); }
I metadati dell’utente sono aggiunti da update_user_meta appena saranno inseriti passando come parametri il suo ID, il nome del meta value.
4. Come visualizzare i dati nel Back End?
All’interno della tabella wp_usermeta sono salvati tutti i dati, ma non sono visibili nel Back End, nel nostro caso non si vedrà solo Privacy Policy, perché gli altri cambi utilizzano di default quelli di WordPress (es. $first_name, $last_name, etc). Per superare quest’ostacolo dobbiamo creare una sezione apposita per il Back End e poter visualizzare all’interno del profilo di ogni singolo utente l’informazione aggiuntiva. Nel codice in basso rendiamo visibile a video nella pagina del profilo utente i dati inseriti durante la registrazione.
Ci sono due Hook differenti come si può notare, perché WordPress permette di differenziare le visualizzazioni del profilo a seconda che sia il Proprietario del sito a visualizzarlo, oppure un altro utente. Nel nostro esempio non ci occupiamo di questa particolare casistica e il profilo ci apparirà semplicemente con le informazioni aggiuntive.
add_action('show_user_profile','show_the_new_meta_values'); // Hook used when a user is viewing their profile add_action('edit_user_profile','show_the_new_meta_values'); // Hook used when a user is viewing another user's profile function show_the_new_meta_values($user) { $privacyPolicy = get_user_meta($user->ID, 'privacy_policy', true); if (get_locale() == 'it_IT') { ?> <h3><?php _e('Informazioni aggiuntive','registrazione-utenti')?></h3> <table class="form-table"> <tr> <th><label for="privacy_policy"><?php _e('Consenso informativa sulla Privacy Policy','registrazione-utenti') ?></label></th> <td><input type="checkbox" name="privacy_policy" value="1" aria-invalid="false" <?php if ($privacyPolicy == "1") { echo "checked"; } else { echo ""; } ?>><span> Consenso all'INFORMATIVA SULLA PRIVACY</span></td> </tr> </table> <?php } else { ?> <h3><?php _e('Additional information','registrazione-utenti')?></h3> <table class="form-table"> <tr> <th><label for="privacy_policy"><?php _e('Consent information on the Privacy Policy','registrazione-utenti') ?></label></th> <td><input type="checkbox" name="privacy_policy" value="1" aria-invalid="false" <?php if ($privacyPolicy == "1") { echo "checked"; } else { echo ""; } ?>><span> Consent to the PRIVACY POLICY</span></td> </tr> </table> <?php } }
Il nostro risultato sarà questo in foto:
5. Le nostre conclusioni
Ecco il codice completo della nostra Guida:
<?php /* Plugin Name: WP Custom Register Form Version: 1.0 Description: A simple plugin to customize the fields in the user registration of WordPress Author: SviluppoMania.com Author URI: http://www.sviluppomania.com License: GPLv2 or later License URI: http://www.gnu.org/licenses/gpl-2.0.html ========================================== Licensing information Copyright 2019 SviluppoMania (e-mail: [email protected]) This program is free software; you can redistribute it and / or modify it under the terms of the GNU General Public License, version 2, as published by the Free Software Foundation. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ /* * // Adding the new item to the registration form */ // Adding the new item to the registration form add_action('register_form','myplugin_register_form'); function myplugin_register_form (){ $first_name = ( isset( $_POST['first_name'] ) ) ? $_POST['first_name']: ''; // Saving the First Name field $last_name = ( isset( $_POST['last_name'] ) ) ? $_POST['last_name']: ''; // Saving the Last Name field $nickname = ( isset( $_POST['nickname'] ) ) ? $_POST['nickname']: ''; // Saving the Nickname field $privacyPolicy = ( isset( $_POST['privacy_policy'] ) ) ? $_POST['privacy_policy']: '0'; // Saving the Privacy Policy field if (get_locale() == 'it_IT') { ?> <p> <label for="first_name"><?php _e('Nome','registrazione-utenti') ?><br /> <input type="text" name="first_name" id="first_name" class="input" value="<?php echo esc_attr(stripslashes($first_name)); ?>" size="25" /></label> </p> <p> <label for="last_name"><?php _e('Cognome','registrazione-utenti') ?><br /> <input type="text" name="last_name" id="last_name" class="input" value="<?php echo esc_attr(stripslashes($last_name)); ?>" size="25" /></label> </p> <p> <label for="nickname"><?php _e('Nickname','registrazione-utenti') ?><br /> <input type="text" name="nickname" id="nickname" class="input" value="<?php echo esc_attr(stripslashes($nickname)); ?>" size="25" /></label> </p> <br> <p> <input type="checkbox" name="privacy_policy" value="1" aria-invalid="false" <?php if ($privacyPolicy == "1") { echo "checked"; } else { echo ""; } ?>></span></span></span> ACCETTO I <a href="https://www.sviluppomania.com/it/termsconditions/">TERMINI E CONDIZIONI D'USO</a> E L'<a href="https://www.sviluppomania.com/it/privacy/">INFORMATIVA SULLA PRIVACY</a>.</p> <br><br> </p> <?php } else { ?> <p> <label for="first_name"><?php _e('First Name','registrazione-utenti') ?><br /> <input type="text" name="first_name" id="first_name" class="input" value="<?php echo esc_attr(stripslashes($first_name)); ?>" size="25" /></label> </p> <p> <label for="last_name"><?php _e('Last Name','registrazione-utenti') ?><br /> <input type="text" name="surname" id="last_name" class="input" value="<?php echo esc_attr(stripslashes($last_name)); ?>" size="25" /></label> </p> <p> <label for="nickname"><?php _e('Nickname','registrazione-utenti') ?><br /> <input type="text" name="nickname" id="nickname" class="input" value="<?php echo esc_attr(stripslashes($nickname)); ?>" size="25" /></label> </p> <br> <p> <input type="checkbox" name="privacy_policy" value="1" aria-invalid="false" <?php if ($privacyPolicy == "1") { echo "checked"; } else { echo ""; } ?>></span></span></span> I ACCEPT THE <a href="https://www.sviluppomania.com/en/termsconditions/">TERMS AND CONDITIONS OF USE</a> AND THE <a href="https://www.sviluppomania.com/en/privacy/">PRIVACY POLICY</a>.</p> <br><br> </p> <?php } } // Validation of the entered data add_filter('registration_errors', 'myplugin_registration_errors', 10, 3); function myplugin_registration_errors ($errors, $sanitized_user_login, $user_email) { if ( empty( $_POST['first_name'] ) ) // The First Name field is mandatory and can not be empty { if (get_locale() == 'it_IT') { $errors->add( 'first_name_error', __('<strong>ERROR</strong>: Devi inserire il tuo Nome','registrazione-utenti') ); } else { $errors->add( 'first_name_error', __('<strong>ERROR</strong>: Please, type your first name ','registrazione-utenti') ); } } if ( empty( $_POST['last_name'] ) ) // The Last Name field is mandatory and can not be empty { if (get_locale() == 'it_IT') { $errors->add( 'last_name_error', __('<strong>ERROR</strong>: Devi inserire il tuo Cognome','registrazione-utenti') ); } else { $errors->add( 'last_name_error', __('<strong>ERROR</strong>: Please, type your last name','registrazione-utenti') ); } } if ( empty( $_POST['nickname'] ) ) // The Nickname field is mandatory and can not be empty { if (get_locale() == 'it_IT') { $errors->add( 'nickname_error', __('<strong>ERROR</strong>: Devi inserire il tuo Nickname','registrazione-utenti') ); } else { $errors->add( 'nickname_error', __('<strong>ERROR</strong>: Please, type your nickname','registrazione-utenti') ); } } if ( empty( $_POST['privacy_policy'] ) || $_POST['privacy_policy'] != "1") // Consent to the Privacy Policy is mandatory { if (get_locale() == 'it_IT') { $errors->add( 'privacy_policy_error', __('<strong>ERROR</strong>: Devi accettare l\'informativa sulla privacy','registrazione-utenti') ); } else { $errors->add( 'privacy_policy_error', __('<strong>ERROR</strong>: Please, agree with the l\'Privacy Policy','registrazione-utenti') ); } } return $errors; } // Data saving add_action('user_register', 'myplugin_user_register'); function myplugin_user_register ($user_id) { if ( isset( $_POST['first_name'] ) ) update_user_meta($user_id, 'first_name', $_POST['first_name']); if ( isset( $_POST['last_name'] ) ) update_user_meta($user_id, 'last_name', $_POST['last_name']); if ( isset( $_POST['nickname'] ) ) update_user_meta($user_id, 'nickname', $_POST['nickname']); if ( isset( $_POST['privacy_policy'] ) ) update_user_meta($user_id, 'privacy_policy', $_POST['privacy_policy']); } /************************************************** * * * Display of additional data on the back end * * * *************************************************/ add_action('show_user_profile','show_the_new_meta_values'); // Hook used when a user is viewing their profile add_action('edit_user_profile','show_the_new_meta_values'); // Hook used when a user is viewing another user's profile function show_the_new_meta_values($user) { $privacyPolicy = get_user_meta($user->ID, 'privacy_policy', true); if (get_locale() == 'it_IT') { ?> <h3><?php _e('Informazioni aggiuntive','registrazione-utenti')?></h3> <table class="form-table"> <tr> <th><label for="privacy_policy"><?php _e('Consenso informativa sulla Privacy Policy','registrazione-utenti') ?></label></th> <td><input type="checkbox" name="privacy_policy" value="1" aria-invalid="false" <?php if ($privacyPolicy == "1") { echo "checked"; } else { echo ""; } ?>><span> Consenso all'INFORMATIVA SULLA PRIVACY</span></td> </tr> </table> <?php } else { ?> <h3><?php _e('Additional information','registrazione-utenti')?></h3> <table class="form-table"> <tr> <th><label for="privacy_policy"><?php _e('Consent information on the Privacy Policy','registrazione-utenti') ?></label></th> <td><input type="checkbox" name="privacy_policy" value="1" aria-invalid="false" <?php if ($privacyPolicy == "1") { echo "checked"; } else { echo ""; } ?>><span> Consent to the PRIVACY POLICY</span></td> </tr> </table> <?php } } // Data update add_action('personal_options_update', 'update_the_new_meta_values'); add_action('edit_user_profile_update', 'update_the_new_meta_values'); function update_the_new_meta_values($user_id) { $new_value_first_name = $_POST['first_name']; $new_value_last_name = $_POST['last_name']; $new_value_nickname = $_POST['nickname']; $new_value_privacy_policy = $_POST['privacy_policy']; // Updated data update_user_meta($user_id,'first_name',$new_value_first_name); update_user_meta($user_id,'last_name',$new_value_last_name); update_user_meta($user_id,'nickname',$new_value_nickname); update_user_meta($user_id,'privacy_policy',$new_value_privacy_policy); // Check that the data has been saved in the Database if ( (get_user_meta($user_id, 'first_name', true ) != $new_value_first_name) || (get_user_meta($user_id, 'last_name', true ) != $new_value_last_name) || (get_user_meta($user_id, 'nickname', true ) != $new_value_nickname) || (get_user_meta($user_id, 'privacy_policy', true ) != $new_value_privacy_policy) ) { wp_die(__( 'Error while saving data on the Database','registrazione-utenti' ) ); } }
Ogni nuovo utente da adesso che desidererà registrarsi al vostro sito dovrà inserire obbligatoriamente alcune informazioni aggiuntive, dal Back End potrete controllare e/o modificare in semplicità i dati inseriti per ogni utente. Spero di esser stato chiaro, ma se avete dubbi non esitate a contattarci tramite il nostro form contattaci oppure commentare l’articolo!
Stay Tuned!