WordPress campi custom nel form di registrazione

Nel creare siti che non siano solo di vetrina utilizzando WordPress, potremmo incontrare l’esigenza di consentire ai nostri visitatori di registrarsi al nostro sistema così da poter usufruire di servizi o semplicemente di visitare il nostro e-commerce.

Durante la registrazione WordPress richiede agli utenti esclusivamente i dati a lui necessari, quindi una mail valida e la password, è possibile però estendere il form di registrazione così da richiedere ulteriori dati ai nostri utenti, dati che potrebbero esserci utili per fornire servizi migliori a chi si registra.

Pensando alla necessità di richiedere dati per la fatturazione in un nostro ipotetico e-commerce potremmo pensare di estendere quanto fatto nell’articolo Woocommerce codice fiscale e partita iva nel checkout e quindi aggiungere il campo codice fiscale/partita iva direttamente all’atto della registrazione: è necessario tener presente che l’utente che registrandosi inserisce questo campo preferirà non doverlo inserire nuovamente in form successivi, quindi è necessario che lo user meta che definiremo in questo frangente sia il medesimo presente in quello di checkout.

Nell’articolo sopracitato abbiamo utilizzato, per contenere il codice fiscale e la partita iva, uno user meta che abbiamo voluto denominare piva_cf, quindi è necessario inserire nel form di registrazione un campo che abbia lo stesso nome .

Sporchiamoci le mani!

Come sempre nello sviluppo di plugin per WordPress è essenziale comprendere i concetti di actions e filters: queste sono le possibilità che offre WordPress per intervenire nel sue dinamiche e per personalizzare alcuni comportamenti del CMS.

In questo specifico caso sfrutteremo le action

  • register_form
  • user_register

ed il filtro registration_errors.

La action register_form ci consente di intervenire sul form di registrazione così da aggiungere il campo che desideriamo, quello per l’inserimento del codice fiscale e della partita iva.

Seguendo una sorta di ordine di chiamata, abbiamo il filtro registration_errors che ci consente di verificare i dati inseriti dagli utenti che desiderano registrarsi e restituire, nel caso questi non soddisfino le nostre esigenze o specifici formati, come nel caso del codice fiscale, uno o più errori che consentano all’utente di correggere i dati inseriti.

Infine abbiamo la action user_register che riceve i dati del form di registrazione e li inserisce a completamento del profilo dell’utente inserendolo come user meta.

Ecco il codice del nostro plugin

<?php
/*
 * Plugin Name: Giorgiomen new registration fields
 * Description: Questo plugin consente di aggiungere nuovi dati al form di registrazione
 * Version: 1.0
 * Author: giorgiomen (Giorgio Mennitto)
 * Author URI: https://giorgiomen.it
 * License: GPLv2 or later
 * Text Domain: giorgiomen_new_registration_fields
 *
 */

// Funzione per la verifica del campo codice fiscale partita iva
function giorgiomen_isCodiceFiscalePartitaIvaValid($valore, $codice_fiscale = true) {
	$espressione = "^[a-z]{6}[0-9]{2}[a-z][0-9]{2}[a-z][0-9]{3}[a-z]$";
	if (! $codice_fiscale) {
		$espressione = "^[0-9]{11}$";
	}
	if (eregi ( $espressione, $valore )) {
		return true;
	}

	return false;
}

// aggiunge i campi al form di registrazione
function giorgiomen_aggiungi_campi() {
	$piva_cf = (! empty ( $_POST ['piva_cf'] )) ? trim ( $_POST ['piva_cf'] ) : '';

	?>
	<p>
		<label for="piva_cf">Partita Iva/Codice Fiscale<br /> <input
			type="text" name="piva_cf" id="piva_cf" class="input"
			value="<?php echo $piva_cf ?>" />
		</label>
	</p>
	<?php
}
add_action ( 'register_form', 'giorgiomen_aggiungi_campi' );

// Verifica i valori inseriti nei campi
function giorgiomen_verifica_campi($errors, $sanitized_user_login, $user_email) {
	$piva_cf = $_POST ["piva_cf"];
	if (empty ( $piva_cf )) {
		$errors->add ( 'piva_cf_errore', '<strong>ERRORE</strong>: Il campo "Partita Iva/Codice fiscale" &egrave; obbligatorio' );
	} else {
		$valid_codice_fiscale = giorgiomen_isCodiceFiscalePartitaIvaValid ( $_POST ['piva_cf'], true );
		$valid_piva = giorgiomen_isCodiceFiscalePartitaIvaValid ( $_POST ['piva_cf'], false );

		if ((! $valid_codice_fiscale) && (! $valid_piva)) {
			$errors->add ( 'piva_cf_errore', '<strong>ERRORE</strong>: I dati inseriti nel campo "Partita Iva/Codice fiscale" non sono validi' );
		}
	}

	return $errors;
}
add_filter ( 'registration_errors', 'giorgiomen_verifica_campi', 99, 3 );

// Salva i dati del form di registrazione
function giorgiomen_salva_dati($user_id) {
	if (! empty ( $_POST ['piva_cf'] )) {
		update_user_meta ( $user_id, 'piva_cf', trim ( $_POST ['piva_cf'] ) );
	}
}
add_action ( 'user_register', 'giorgiomen_salva_dati' );

è sufficiente creare nella cartella wp-content/plugins una cartella giorgiomen_new_registration_fields ed al suo interno un file denominato giorgiomen_new_registration_fields.php  che avrà come contenuto il codice sopra riportato.

Il risultato, dopo aver installato ed abilitato il plugin sarà il seguente.

Come mostrato il campo “Partita Iva/Codice Fiscale” è disponibile all’interno del form e provando ad inserire dati errati potremo verificare come il sistema restituirà come desiderato l’errore di errata compilazione del campo.

Ancora una volta possiamo complimentarci con noi stessi e dirci un grosso Ottimo lavoro!

 

12 Comments

  • Ciao,

    ho trovato il tuo articolo molto interessante, l’unico problema è che il plugin non verifica l’inserimento di codice fiscale/partita iva duplicati, e questo credo sia un problema, sono riuscito a registrarmi con due profili diversi e lo stesso codice fiscale, puoi inserire una verifica per evitare registrazione con dati duplicati?

    • Ciao Elias,
      cercherò di accontentarti nei prossimi giorni. Resta però da valutare la possibilità che due persone, appartenenti alla medesima azienda desiderino acquistare per conto di questa: in questo caso entrambi inseriranno la stessa partita iva. Resta comunque valida la tua necessità.
      Grazie per i complimenti per l’articolo.

  • Ciao, grazie mille….

    è possibile inserire il campo C.fiscale P.iva nella registrazione di Woocommerce ?
    intendo proprio nella pagina my account dove c’è il form del login e della registrazione.

    Grazie mille

  • e tra l altro… con il metodo che hai menzionato sopra… il codice fiscale / partita iva non viene memorizzato nel back end …. o sbaglio qualcosa ?

    Grazie mille ancora

    • Si infatti… sarebbe ottimo se registrasse anche nel back. Poi sarebbe anche interessante inviare nella notifica mail la partita iva

  • @emiliano e @salvatore i dati sono memorizzati nel database e potete estrarli con la funzione get_user_meta la cui documentazione potete trovare semplicemente su internet.
    Per l’invio dei dati via e-mail è ovviamente fattibile, ma non rientrava negli obiettivi dell’articolo.

    • Buongiorno Giorgio e complimenti per i due articoli correlati, mi stanno dando una grande mano!!
      Potresti dirmi o segnalarmi qualcosa in più sulla possibilità di aggiungere il nuovo campo anche nella pagina utente in admin?

      Grazie mille.

      Gianluca

  • Grazie! per me funziona benissimo e risolve un grosso problema

  • Codice Fiscale <input
    type="text" name="cod_fisc" id="cod_fisc" class="input"
    value="” />

    questo per rendere il CF uniforme tutto maiuscolo per tutti gli iscritti… vedere uno in maiuscolo e l’altro mezzo minuscolo e mezzo maiuscolo fa pietà quindi una rigadi codice per standarizzare… è ben spesa.
    poi c’è la questione eregi… potete risolvere così:
    function giorgiomen_isCodiceFiscalePartitaIvaValid($valore, $codice_fiscale = true) {
    $espressione = “/^[a-z]{6}[0-9]{2}[a-z][0-9]{2}[a-z][0-9]{3}[a-z]$/i”;
    if (! $codice_fiscale) {
    $espressione = “/^[0-9]{11}$/i”;
    }
    if (preg_match ( $espressione, $valore )) {
    return true;
    }

    return false;
    }

  • Codice Fiscale <input
    type="text" name="cod_fisc" id="cod_fisc" class="input"
    value="” />

    questa riga per rendere il C.F. maiuscolo sempre.
    value=”” />

  • {

    Codice Fiscale <input
    type="text" name="cod_fisc" id="cod_fisc" class="input"
    value="” />

    }

Commenta

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *