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:

Čtěte  Nejlepší WordPress šablony pro medicínu, zdraví a krásu
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:

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.

Related posts

Leave a Reply

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

Chcete mít přehled o dění ve světě WordPressu?

Přímo do vašeho emailu

Pravidelný přehled o novinkách, trendech a událostech, které se točí kolem WordPressu. Souhrn toho nejzajímavějšího od nás i ze zahraničí.