Se avete
attivato la possibilità di registrarsi al vostro sito
wordpress, ma i campi che vengono chiesti di default vi sembrano troppo pochi, non vi preoccupate, ora vi spiegherò
come modificare il form di registrazione WordPress senza plugin aggiuntivi.
Di default, il
form di registrazione utente wordpress chiede solo i seguenti campi:
Il che è molto comodo per far registrare velocemente un utente al nostro sito web, tuttavia potremmo voler
profilare meglio gli utenti che andiamo a registrare sul nostro blog, magari
senza dover installare alcun plugin aggiuntivo.
Se vogliamo ad esempio chiedere i campi
nome e
cognome (separati) ed il campo
città,
bisogna andare nella cartella del tema del sito wordpress:
cartellasitowordpress\wp-content\themes\nometemausato
Qui,
aprire il file 'functions.php' ed
aggiungere le seguenti righe di codice php:
add_action( 'register_form', 'nuovicampiform' );
function nuovicampiform()
{
$nome = ( ! empty( $_POST['nome'] ) ) ? trim( $_POST['nome'] ) : '';
$cognome = ( ! empty( $_POST['cognome'] ) ) ? trim( $_POST['cognome'] ) : '';
$citta = ( ! empty( $_POST['citta'] ) ) ? trim( $_POST['citta'] ) : '';
?>
<p><label for="nome"><?php _e( 'Nome', 'localhost' ) ?><br />
<input type="text" name="nome" id="nome" class="input" value="<?php echo esc_attr(wp_unslash($nome));?>" size="25" /></label>
</p>
<p><label for="cognome"><?php _e( 'cognome', 'localhost' ) ?><br />
<input type="text" name="cognome" id="cognome" class="input" value="<?php echo esc_attr(wp_unslash($cognome));?>" size="25" /></label>
</p>
<p><label for="citta"><?php _e( 'citta', 'localhost' ) ?><br />
<input type="text" name="citta" id="citta" class="input" value="<?php echo esc_attr(wp_unslash($citta));?>" size="25" /></label>
</p>
<?php
}
add_filter('registration_errors', 'nuovicampiform_errori', 10, 3);
function nuovicampiform_errori( $errors, $sanitized_user_login, $user_email )
{
if ( empty( $_POST['nome'] ) || ! empty( $_POST['nome'] ) && trim( $_POST['nome'] ) == '' ) $errors->add( 'nome_error', __( '<strong>ERRORE</strong>: Compilare il campo Nome.', 'localhost' ) );
if ( empty( $_POST['cognome'] ) || ! empty( $_POST['cognome'] ) && trim( $_POST['cognome'] ) == '' ) $errors->add( 'cognome_error', __( '<strong>ERRORE</strong>: Compilare il campo Cognome.', 'localhost' ) );
if ( empty( $_POST['citta'] ) || ! empty( $_POST['citta'] ) && trim( $_POST['citta'] ) == '' ) $errors->add( 'citta_error', __( '<strong>ERRORE</strong>: Compilare il campo Città.', 'localhost' ) );
return $errors;
}
add_action('user_register', 'nuovicampiform_register');
function nuovicampiform_register( $user_id )
{
if ( ! empty( $_POST['nome'] ) ) update_user_meta( $user_id, 'first_name', trim( $_POST['nome'] ) );
if ( ! empty( $_POST['cognome'] ) ) update_user_meta( $user_id, 'last_name', trim( $_POST['cognome'] ) );
if ( ! empty( $_POST['citta'] ) ) update_user_meta( $user_id, 'citta', trim( $_POST['citta'] ) );
}
add_action('personal_options_update', 'aggiornacampi');
add_action('edit_user_profile_update', 'aggiornacampi');
function aggiornacampi($user_id)
{
if ( ! empty( $_POST['citta'] ) ) update_user_meta( $user_id, 'citta', trim( $_POST['citta'] ) );
}
Il risultato sarà che il form di registrazione a wordpress chiederà anche i campi
nome, cognome, e città, con tanto di controllo (ovvero obbligherà ad inserire qualcosa in quei campi, rendendoli di fatto campi obbligatori).
Andiamo ad analizzare un po' il codice appena inserito.
add_action( 'register_form', 'nuovicampiform' );
Consente di lanciare l'azione
register_form, eseguendo la funzione
nuovicampiform, che al suo interno contiene i campi del form che appaiono a video.
Qui potrete scrivere tutto l'html che volete, in modo da decidere come fare apparire i campi, ed in che ordine.
add_filter('registration_errors', 'nuovicampiform_errori', 10, 3);
Lanciando la
registration_errors andiamo a gestire tutti i controlli del form, in questo campo usando una funzione chiamata
nuovicampiform_errori.
Qui possiamo scrivere il codice php necessario per effettuare tutti i controlli del caso per i campi che andiamo a passare dal nostro form.
add_action('user_register', 'nuovicampiform_register');
Lanciando invece la
user_register andiamo a registrare/salvare fisicamente i dati nel db, con la funzione
nuovicampiform_register.
In particolare, con la funzione
update_user_meta, stiamo andando a scrivere i nuovi campi appena salvati dentro alla tabella
mysql di wordpress chiamata
wp_usermeta.
add_action('personal_options_update', 'aggiornacampi');
add_action('edit_user_profile_update', 'aggiornacampi');
Infine da non dimenticare, occorre lanciare la
personal_options_update e la
edit_user_profile_update, altrimenti non potremo modificare i nuovi campi appena creati (io ci ho perso un sacco di tempo prima di capirlo :p).
Inoltre,
se vogliamo che i nuovi campi appaiano anche in modifica o in visualizzazione nel profilo utente, occorre modificare anche il file
user-edit.php presente nella cartella
wp-admin del vostro sito wordpress, aggiungendo ad esempio questo codice:
<tr class="user-last-name-wrap">
<th><label for="citta"><?php _e('Citta\'') ?></label></th>
<td><input type="text" name="citta" id="citta" value="<?php echo esc_attr($profileuser->citta) ?>" class="regular-text" /></td>
</tr>
In questo esempio, dato che per i campi
nome e cognome ho usato quelli già esistenti su wordpress chiamati
first_name e last_name, ho dovuto aggiornare con la funzione
aggiornacampi solo il nuovo campo
città. Lo stesso vale anche per la modifica del file
user-edit.php, che già conteneva i campi
nome e cognome.
Con questo metodo potrete quindi
modificare il form di registrazione utenti di wordpress,
senza usare alcun componente aggiuntivo / plugin, mettendo tutti i campi che vi pare (ad esempio anche una tendina con le province presa da un database mysql) ed aggiungendo tutti i controlli necessari.