WordPress: creare una pagina di iscrizione personalizzata

WordPress dispone della funzione wp_insert_user() con cui è possibile creare nuovi utenti ed inserirli nel database. Possiamo sfruttare questa funzione per creare una pagina di iscrizione personalizzata. Vediamo come.

La prima cosa da fare è definire un nuovo template di pagina che chiameremo Signup:


<?php
/*
Template Name: Signup
*/
?>

L'elaborazione dei cinque campi richiesti (username, password, e-mail, nome e cognome) deve avvenire prima della chiamata per l'inclusione dell'header della pagina.

Quindi provvediamo a rendere sicuri i dati inseriti:


$username = mysql_real_escape_string($_POST['username']);
$password = mysql_real_escape_string($_POST['password']);
$email = mysql_real_escape_string($_POST['email']);
$name = mysql_real_escape_string($_POST['name']);
$lastname = mysql_real_escape_string($_POST['lastname']);

A questo punto definiamo due variabili, una per la gestione degli errori di validazione e un'altra per segnalare allo script che i dati sono stati inviati:


$errors = array();
$dataSent;

Ora abbiamo un problema: se non segnaliamo allo script l'avvenuto invio del form, questo elaborerà i dati ad ogni caricamento della pagina. Definiremo quindi un campo nascosto per ovviare al problema:


if(isset($_POST['submitted'])) {


	// form inviato


}

All'interno di questo blocco if eseguiremo la validazione dei dati (ovviamente da migliorare):


if($username == '') {
		
			$errors[] = 'Username mancante';
			$hasError = true;
		
		}
		
		if($password == '') {
		
			$errors[] = 'Password mancante';
			$hasError = true;
		
		
		}
		
		if(!filter_var($email, FILTER_VALIDATE_EMAIL)) {
		
			$errors[] = 'E-mail non valida';
			$hasError = true;
		
		}
		
		if($name == '') {
		
			$errors[] = 'Nome mancante';
			$hasError = true;
		
		}
		
		if($lastname == '') {
		
			$errors[] = 'Cognome mancante';
			$hasError = true;
		
		}
		
		if(!isset($hasError)) {
		
			$pwd = str_replace('\\', '', $password);
			$display_name = $name . ' ' . $lastname;
			
			 wp_insert_user(array(
		    	'user_pass' => $pwd,
		    	'user_login'=> $username,
		    	'user_email' => $email,
		    	'display_name' => $display_name,
		    	'role' => 'subscriber'
		     ));
		     
		     $dataSent = true;

		}

La funzione wp_insert_user() necessita che la password sia inserita senza alcuna codifica preliminare. Infatti questa funzione provvederà automaticamente alla codifica e al salting della password una volta invocata. In questo caso abbiamo creato un utente di tipo sottoscrittore.

Nota

Per evitare falsificazioni nell'invio del form è di fondamentale importanza seguire le pratiche riassunte in questo articolo. Dato che la password viene inviata in chiaro tramite una richiesta POST, dovreste sempre verificare che l'invio del form venga validato da un token random di sessione valido solo per l'invio corrente. Inoltre dovreste sempre verificare che la pagina e il template non vengano caricati direttamente tramite richieste remote (vedi sopra).

Quindi possiamo inserire l'header ed il corpo principale della pagina:

[php htmlscript="true"] <?php get_header(); ?> <div id="content"> <div id="page" class="post"> </div> </div>

All'interno del corpo della pagina possiamo a questo punto visualizzare il messaggio di avvenuta iscrizione o ripresentare il form con gli errori di validazione riscontrati:


<?php if(isset($dataSent) && $dataSent == true) {
            
    	echo '<p class="success">Iscrizione effettuata con successo. Effettua il <a href="' . wp_login_url() . '">login</a></p>';
            
	 } else { ?>
	 
	   <!-- inizia il Loop e visualizza il form -->
	 
	 <?php } ?>

Potete visualizzare il template completo di seguito (ovviamente da perfezionare secondo le vostre esigenze).

[php htmlscript="true"] <?php /* Template Name: Signup */ ?> <?php $username = mysql_real_escape_string($_POST['username']); $password = mysql_real_escape_string($_POST['password']); $email = mysql_real_escape_string($_POST['email']); $name = mysql_real_escape_string($_POST['name']); $lastname = mysql_real_escape_string($_POST['lastname']); $errors = array(); $dataSent; if(isset($_POST['submitted'])) { if($username == '') { $errors[] = 'Username mancante'; $hasError = true; } if($password == '') { $errors[] = 'Password mancante'; $hasError = true; } if(!filter_var($email, FILTER_VALIDATE_EMAIL)) { $errors[] = 'E-mail non valida'; $hasError = true; } if($name == '') { $errors[] = 'Nome mancante'; $hasError = true; } if($lastname == '') { $errors[] = 'Cognome mancante'; $hasError = true; } if(!isset($hasError)) { $pwd = str_replace('\\', '', $password); $display_name = $name . ' ' . $lastname; wp_insert_user(array( 'user_pass' => $pwd, 'user_login'=> $username, 'user_email' => $email, 'display_name' => $display_name, 'role' => 'subscriber' )); $dataSent = true; } }?> <?php get_header(); ?> <div id="content"> <div id="page" class="post"> <?php if(isset($dataSent) && $dataSent == true) { echo '<p class="success">Iscrizione effettuata con successo. Effettua il <a href="' . wp_login_url() . '">login</a></p>'; } else { ?> <!-- inizia il Loop e visualizza il form --> <?php } ?> </div> </div> <?php get_sidebar(); ?> <?php get_footer(); ?>
Torna su