Di default, il form di registrazione utente wordpress chiede solo i seguenti campi:
- Nome utente
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.
1 commenti so far
Ottimo trick...
Lascia un commento!