Form di registrazione personalizzato

caniegatti

Nuovo Utente
4 Nov 2013
27
0
1
Ciao a tutti,

ho, prendendo spunto da un tutorial, creato un form di registrazione personalizzato per Wordpress utilizzando questo codice:

Codice:
<?p  
/* 
Template Name: Login Page
*/
?>
<? get_header()?>

    <div class="wrapper">
	
	<?php
	$err = '';
	$success = '';

	global $wpdb, $PasswordHash, $current_user, $user_ID;

	if(isset($_POST['task']) && $_POST['task'] == 'register' ) {

		
		$pwd1 = $wpdb->escape(trim($_POST['pwd1']));
		$pwd2 = $wpdb->escape(trim($_POST['pwd2']));
		$first_name = $wpdb->escape(trim($_POST['first_name']));
		$last_name = $wpdb->escape(trim($_POST['last_name']));
		$email = $wpdb->escape(trim($_POST['email']));
		$username = $wpdb->escape(trim($_POST['username']));
		
		if( $email == "" || $pwd1 == "" || $pwd2 == "" || $username == "" || $first_name == "" || $last_name == "") {
			$err = 'Devi compilare tutti i campi obbligatori';
		} else if(!filter_var($email, FILTER_VALIDATE_EMAIL)) {
			$err = 'Indirizzo email non valido.';
		} else if(email_exists($email) ) {
			$err = 'Indirizzo email gi&agrave registrato.';
		} else if($pwd1 <> $pwd2 ){
			$err = 'Le password non corrispondono.';		
		} else {

			$user_id = wp_insert_user( array ('first_name' => apply_filters('pre_user_first_name', $first_name), 'last_name' => apply_filters('pre_user_last_name', $last_name), 'user_pass' => apply_filters('pre_user_user_pass', $pwd1), 'user_login' => apply_filters('pre_user_user_login', $username), 'user_email' => apply_filters('pre_user_user_email', $email), 'role' => 'subscriber' ) );
			if( is_wp_error($user_id) ) {
				$err = 'Errore in fase di registrazione';
				
			} else {
				do_action('user_register', $user_id);
			
				$success = 'You\'re successfully register';
			}
			
		}
		
	}
	?>

        <!--display error/success message-->
	<div id="message">
		<?php 
			if(! empty($err) ) :
				echo '<p class="error">'.$err.'</p>';
			endif;
		?>
		
		<?php 
			if(! empty($success) ) :
				echo '<p class="error">'.$success.'</p>';
			endif;
		?>
	</div>

	<form method="post">
		<h3>Don't have an account?<br/> Create one now.</h3>
		<p><label>Cognome*</label></p>
		<p><input type="text" value="" name="last_name" id="last_name" /></p>
		<p><label>Nome*</label></p>
		<p><input type="text" value="" name="first_name" id="first_name" /></p>
		<p><label>Email*</label></p>
		<p><input type="text" value="" name="email" id="email" /></p>
		<p><label>Username*</label></p>
		<p><input type="text" value="" name="username" id="username" /></p>
		<p><label>Password*</label></p>
		<p><input type="password" value="" name="pwd1" id="pwd1" /></p>
		<p><label>Reinserisci Password*</label></p>
		<p><input type="password" value="" name="pwd2" id="pwd2" /></p>
		<div class="alignleft"><p><?php if($sucess != "") { echo $sucess; } ?> <?php if($err != "") { echo $err; } ?></p></div>
        <div>Compilando il seguente form di registrazione il cliente accetta quanto previsto nel disclaimer</div>
		<button type="submit" name="btnregister" class="button" >Registrati</button>
		<input type="hidden" name="task" value="register" />
	</form>

</div>
<div></div>
<?php get_footer() ?>

Ora ho due problemi:

1) Quando invio la richiesta di registrazione, se è tutto compilato questa va a buon fine e viene fuori il messaggio di registrazione effettuata ma sotto resta il form..come faccio, una volta che la registrazione è andata a buon fine, far sparire il form?

2) Ho provato ad aggiungere questa stringa di codice
Codice:
// e inviamo una mail con la riuscita registazione

email ($email, "Registrazione OK", "Complimenti registrazione effettuata con successo", "From: miamail@miohosto.it");

alla riga 42, dopo
Codice:
} else {
				do_action('user_register', $user_id);

ma non funziona più il form dopo

Dove sbaglio?

Grazie a tutti
 
Ciao, il form potresti racchiuderlo in una condizione
PHP:
if (!isset($_POST['task']) {
      // form
}
in questo modo quando il post è inviato non dovrebbe mostrarlo.

Per il secondo problema la funzione dovrebbe essere mail() non email();
 
Ciao, grazie mille della risposta. Ho due piccoli problemi.

Il form adesso funziona correttamente ma all'admin non arriva una mail quanto l'utente si registra (primo problema che non so come risolvere).

Vorrei poi che al cliente arrivasse una mail di conferma (che adesso arriva grazie a questa porzione di codice
Codice:
			// e inviamo una mail con la riuscita registazione

mail ($email, "Registrazione Sito Web", "Complimenti registrazione effettuata con successo", "From: miamail@miosito.it");
) con formattazione html per renderla più carina.

Come posso fare? Ho provato utilizzando questo script (modificato per quello che serve a me ma non funziona)
Codice:
add_filter( 'wp_mail_content_type', 'set_html_content_type' );
wp_mail ( '$email', 'Registrazione Sito Web', 'A <strong>HTML</strong> email' 'From: miamail@miosito.it' );
function set_html_content_type() 
{
  return 'text/html';
}

remove_filter ( ‘wp_mail_content_type’, ‘set_html_content_type’ );

Grazie e buona serata
 

Discussioni simili