Как позволить пользователю установить пароль при регистрации

9 сент. 2012 г., 03:43:27
Просмотры: 14.7K
Голосов: 5

Я работаю над фронтенд-формой регистрации и уже добился работы стандартной формы, но... хотел бы добавить возможность для пользователя выбирать свой собственный пароль.

Я немного новичок в этом, так что не могли бы вы мне помочь? :)

Вот мой текущий код:

<?php if(!is_user_logged_in()) { ?>


<?php
if(get_option('users_can_register')) {
//Проверяем, разрешена ли регистрация пользователей администратором
?>

<?php

if($_POST){
    //Экранируем все вводимые данные для SQL
    $username = $wpdb->escape($_REQUEST['username']);
    if(empty($username)) {
        echo "<span style='color:#FF0000'><strong>Ошибка..</strong></span><br /><br />Вы должны заполнить имя пользователя.";
        exit();
    }
    $email = $wpdb->escape($_REQUEST['email']);
    if(!preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$/", $email)) {
        echo "<span style='color:#FF0000'><strong>Ошибка..</strong></span><br /><br />Пожалуйста, используйте корректный email-адрес.";
        exit();
    }

    $random_password = wp_generate_password( 12, false );
    $status = wp_create_user( $username, $random_password, $email );
    if ( is_wp_error($status) )
        echo "<span style='color:#FF0000'><strong>Ошибка..</strong></span><br /><br />Имя пользователя уже существует. Пожалуйста, попробуйте другое.";
    else {
        $from = get_option('admin_email');
        $headers = 'From: '.$from . "\r\n";
        $subject = "Регистрация успешна!";
        $msg = "Добро пожаловать, вы успешно зарегистрированы. Вот ваши имя пользователя и пароль.\nИнформация:\nИмя пользователя: $username\nПароль: $random_password";
        wp_mail( $email, $subject, $msg, $headers );
        echo "<strong>Вы успешно зарегистрированы. Письмо с вашими данными отправлено на указанный email..";
    }

    exit();

}
 else
{
//Вставляем форму регистрации и javascript здесь

?>


<div id="result"></div>
<div style="padding-top:5px; padding-bottom:10px;">Заполните информацию для регистрации.</div>

<form id="wp_signup_form" action="" method="post">
<input type="text" name="username" style="width:250px; margin-bottom:3px;" placeholder="Имя пользователя"><br />
<input type="text" name="email" placeholder="E-mail" style="width:250px; margin-bottom:3px;"><br />
<input type="submit" id="submitbtn" name="submit" value="Зарегистрироваться" class="knapp" style="padding:8px;">
</form>
<script type="text/javascript">                         
$("#submitbtn").click(function() {
$('#result').html('<img src="<?php bloginfo('template_url'); ?>/images/loader.gif" class="loader" />').fadeIn();
var input_data = $('#wp_signup_form').serialize();
$.ajax({
type: "POST",
url:  "<?php echo "http://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; ?>",
data: input_data,
success: function(msg){
$('.loader').remove();
$('
<div>').html(msg).appendTo('div#result').hide().fadeIn('slow');
}
});
return false;

});
</script>
<?php
// вставка завершена

}
?>

<?php
    }

else 
?>

<!-- конец формы регистрации -->
<br />
Уже зарегистрированы? Войдите в свой аккаунт с помощью формы в сайдбаре.
<?php } else { ?>
Вы уже вошли в систему...
<?php } ?>
0
Все ответы на вопрос 2
4
11

Это не так сложно, как кажется :)

Добавьте поля для пароля в вашу форму:

пароль: <input type="password" name="pass1" style="width:250px; margin-bottom:3px;"><br />
повторите пароль: <input type="password" name="pass2" style="width:250px; margin-bottom:3px;"><br />

Затем в вашем if($_POST){ замените эту строку:

$random_password = wp_generate_password( 12, false );

на это:

$pass1 = $wpdb->escape($_REQUEST['pass1']);
$pass2 = $wpdb->escape($_REQUEST['pass2']);
if ($pass1 != $pass2){
    echo "<span style='color:#FF0000'><strong>Ошибка..</strong></span><br /><br />Пароли не совпадают.";
        exit();

}
$random_password = $pass1;
9 сент. 2012 г. 11:34:18
Комментарии

работает отлично!

Demilio Demilio
9 сент. 2012 г. 15:14:49

У меня тоже сработало, так что +1.

Ciprian Ciprian
10 мар. 2013 г. 14:02:18

Какой это файл?

Mugen Mugen
26 июл. 2020 г. 13:07:21

Также, есть ли идеи, будут ли эти изменения потеряны после обновления WordPress?

Mugen Mugen
26 июл. 2020 г. 13:13:16
0

Обратите внимание, что для проверки поля email вы можете использовать встроенную функцию WordPress. Проверьте эту ссылку is_email

$email = $wpdb->escape($_REQUEST['email']);
if( !is_email($email) ) {
    echo "<span style='color:#FF0000'><strong>Ошибка..</strong></span><br /><br />Пожалуйста, используйте корректный email адрес.";
    exit();
}

Опубликовано как ответ из-за небольшой репутации.

9 нояб. 2015 г. 12:28:16