Jak přidat pole pro heslo do registračního formuláře bez použití pluginu

Při registraci do blogu bežícím na redakčním systému WordPress, je nutné nejprve zadat uživatelské jméno a email, náhodně vygenerované heslo nám pak automaticky přijde na zadaný email. Heslo si pak můžeme změnit v profilu uživatele.

Jak postupovat, pokud chceme uživatelům umožnit zadat své heslo již při registraci a vynechat tak mezikrok s nutností kopírování vygenerovaného hesla a jeho změně v nastavení účtu.

Původní formulář vypadá takto:

My budeme chtít přidat dvě pole pro heslo a potvrzení hesla. Do functions.php vložíme následující funkci:

function vm_extra_fields(){
echo '
<p>
   <label for="password">Password</label>
     <input id="password" class="input" type="password" tabindex="30"
      size="25" value="" name="password" />
     <span>Password must be long minimum 8 characters.</span>
</p>
<p>
    <label for="repeat_password">Repeat password</label>
    <input id="repeat_password" class="input" type="password" tabindex="40" 
     size="25" value="" name="repeat_password" />
    <span><br />Please enter the same password.</span>
</p>';
}

Tím jsme vytvořili dvě pole pro heslo a potvrzení hesla, ještě je přidáme do formuláře pomocí add_action a hooku register_form:

add_action( 'register_form', 'vm_extra_fields' );

Výsledek:

Na formuláři je vidět, že jako podmínku jsme si stanovili, že heslo musí být dlouhé minimálně 8 znaků a musíme tedy provést kontrolu:

function vm_check_register_fields($login, $email, $errors) {
  if ( $_POST['password'] !== $_POST['repeat_password'] ) {
  $errors->add( 'passwords_not_matched', "<strong>ERROR</strong>: 
  Passwords must match" );
  }
  if ( strlen( $_POST['password'] ) < 8 ) { 		
  $errors->add( 'password_too_short', "<strong>ERROR</strong>: 
  Passwords must be at least eight characters long" );
  }
}
 
add_action( 'register_post', 'vm_check_register_fields', 10, 3 );

Určitě jste si také všimli, že se na formuláři již nezobrazuje upozornění, že heslo bude zasláno emailem. To nyní postrádá smysl a proto jej odstraníme. Bohužel se mi nepodařilo přijít na způsob, který by fungoval univerzálně pro jakýkoliv jazyk, proto jsem vytvořil filtr pro angličtinu a češtinu. Při použití jiného jazyka je nutné změnit podmínku:

function vm_edit_password_email_text ( $text ) {
	if ( $text == 'A password will be e-mailed to you.' ) {
		$text = '';
	}
	return $text;
}
add_filter( 'gettext', 'vm_edit_password_email_text' );

Jako poslední krok uložíme zadané heslo do databáze:

function vm_register_extra_fields( $user_id ){
	$userdata = array();
 
	$userdata['ID'] = $user_id;
	if ( $_POST['password'] !== '' ) {
		$userdata['user_pass'] = $_POST['password'];
	}
	$new_user_id = wp_update_user( $userdata );
}
add_action( 'user_register', 'vm_register_extra_fields', 100 );

Samozřejmě, že by bylo fajn přidat ještě kontrolu třeba pomocí CAPTCHA, ale to není součástí tohoto článku.
V některém z dalších článků popíši způsob, jak vytvořit widget s přihlašovacím formulářem pro umístění do sidebaru.

About The Author

Zajímá mne Wordpress, responsivní šablony a zkrátka vše kolem tohoto skvělého redakčního systému.

Související články

Přidejte komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *