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.