venerdì 15 luglio 2016

Modificare il form di registrazione WordPress senza plugin

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:

  • Nome utente
  • Email

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).

Modificare il form di registrazione WordPress senza plugin

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...

Piaciuto l'articolo? Lascia un commento!

EmoticonEmoticon