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 '
Password must be long minimum 8 characters.
Please enter the same password.
';
}
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', "ERROR:
Passwords must match" );
}
if ( strlen( $_POST['password'] ) add( 'password_too_short', "ERROR:
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.