Вопрос или проблема
Я использую этот код в качестве пользовательской формы регистрации. Есть ли возможность создать сообщение об успехе для этого?
<?php
/*
** Имя шаблона: Страница регистрации
*/
get_header();
global $wpdb, $user_ID;
if (isset($_POST['user_registeration']))
{
//registration_validation($_POST['username'], $_POST['useremail']);
global $reg_errors;
$reg_errors = new WP_Error;
$username=$_POST['username'];
$useremail=$_POST['useremail'];
$password=$_POST['password'];
if(empty( $username ) || empty( $useremail ) || empty($password))
{
$reg_errors->add('field', 'Обязательное поле формы отсутствует');
}
if ( 6 > strlen( $username ) )
{
$reg_errors->add('username_length', 'Слишком короткое имя пользователя. Минимум 6 символов требуется' );
}
if ( username_exists( $username ) )
{
$reg_errors->add('user_name', 'Имя пользователя, которое вы ввели, уже существует!');
}
if ( ! validate_username( $username ) )
{
$reg_errors->add( 'username_invalid', 'Введенное вами имя пользователя недействительно!' );
}
if ( !is_email( $useremail ) )
{
$reg_errors->add( 'email_invalid', 'Email недействителен!' );
}
if ( email_exists( $useremail ) )
{
$reg_errors->add( 'email', 'Email уже существует!' );
}
if ( 5 > strlen( $password ) ) {
$reg_errors->add( 'password', 'Длина пароля должна быть более 5!' );
}
if (is_wp_error( $reg_errors ))
{
foreach ( $reg_errors->get_error_messages() as $error )
{
$signUpError="<p style="color:#FF0000; text-aling:left;"><strong>ОШИБКА</strong>: ".$error . '<br /></p>';
}
}
if ( 1 > count( $reg_errors->get_error_messages() ) )
{
// Очистить ввод пользователя
global $username, $useremail;
$username = sanitize_user( $_POST['username'] );
$useremail = sanitize_email( $_POST['useremail'] );
$password = esc_attr( $_POST['password'] );
$userdata = array(
'user_login' => $username,
'user_email' => $useremail,
'user_pass' => $password,
);
$user = wp_insert_user( $userdata );
}
}
?>
<h3>Создайте свою учетную запись</h3>
<form action="" method="post" name="user_registeration">
<label>Имя пользователя <span class="error">*</span></label>
<input type="text" name="username" placeholder="Введите ваше имя пользователя" class="text" required /><br />
<label>Email адрес <span class="error">*</span></label>
<input type="text" name="useremail" class="text" placeholder="Введите ваш Email" required /> <br />
<label>Пароль <span class="error">*</span></label>
<input type="password" name="password" class="text" placeholder="Введите ваш пароль" required /> <br />
<input type="submit" name="user_registeration" value="Зарегистрироваться" />
</form>
<?php if(isset($signUpError)){echo '<div>'.$signUpError.'</div>';}?>
Простой способ — перенаправить отправителя формы
// когда форма отправлена:
wp_redirect($your_post_url . '&submitform=1');
exit;
Затем вы можете просто проверить, определено ли “submitform”, чтобы отобразить то, что хотите:
// тестирование установки url submitform:
if (isset($_GET['submitform']))
echo '<div class="successmessage"><p>' . __('Ваше сообщение об успехе.') . '</p></div>';
endif;
Если вы посмотрите на функцию wp_insert_user()
в кодексе, вы увидите, что она возвращает ID нового пользователя, если все прошло хорошо, или объект WP Error, если это не удалось.
Таким образом, вы можете обернуть свою форму в условные операторы, чтобы обработать различные сценарии.
(Краткий синтаксис)
if( is_numeric( $user ) ) {
<p>Поздравляем с тем, что вы новый пользователь</p>
} else if( is_wp_error( $user ) ) {
<p>При добавлении пользователя возникла проблема</p>
} else {
<form.........
// Не забудьте также обработать ошибки при регистрации
}
Также добавлю, что в вашем исходном коде я вижу, что вы проверяете значения, которые могут не совпадать с конечными значениями, которые вы вставляете в свою БД через wp_insert_user
— если вы вставляете очищенную строку пользователя, то проверяйте очищенную строку пользователя. В противном случае this<tag>user
добавляется как thisuser
— но вы этого не проверили…
Ответ или решение
Конечно, давайте внесем изменения в ваш код, чтобы добавить сообщение об успешной регистрации пользователя после отправки формы. Мы будем использовать указанные переменные и проверим результат функции wp_insert_user()
.
Вот полное решение:
Измененный код для страницы регистрации:
<?php
/*
** Template Name: Custom Register Page
*/
get_header();
global $wpdb, $user_ID;
if (isset($_POST['user_registeration'])) {
global $reg_errors;
$reg_errors = new WP_Error;
// Получаем данные пользователя из формы
$username = $_POST['username'];
$useremail = $_POST['useremail'];
$password = $_POST['password'];
// Валидация полей
if (empty($username) || empty($useremail) || empty($password)) {
$reg_errors->add('field', 'Required form field is missing');
}
if (6 > strlen($username)) {
$reg_errors->add('username_length', 'Username too short. At least 6 characters is required');
}
if (username_exists($username)) {
$reg_errors->add('user_name', 'The username you entered already exists!');
}
if (!validate_username($username)) {
$reg_errors->add('username_invalid', 'The username you entered is not valid!');
}
if (!is_email($useremail)) {
$reg_errors->add('email_invalid', 'Email id is not valid!');
}
if (email_exists($useremail)) {
$reg_errors->add('email', 'Email Already exists!');
}
if (5 > strlen($password)) {
$reg_errors->add('password', 'Password length must be greater than 5!');
}
// Обработка ошибок
if (is_wp_error($reg_errors)) {
foreach ($reg_errors->get_error_messages() as $error) {
$signUpError = "<p style='color:#FF0000; text-align:left;'><strong>ERROR</strong>: ".$error . '<br /></p>';
}
}
// Если нет ошибок, регистрируем пользователя
if (1 > count($reg_errors->get_error_messages())) {
global $username, $useremail;
$username = sanitize_user($_POST['username']);
$useremail = sanitize_email($_POST['useremail']);
$password = esc_attr($_POST['password']);
$userdata = array(
'user_login' => $username,
'user_email' => $useremail,
'user_pass' => $password,
);
$user = wp_insert_user($userdata);
// Проверяем, успешно ли произошла регистрация
if (is_numeric($user)) {
// Пользователь успешно зарегистрирован
$successMessage = "<div class='successmessage'><p>Поздравляем! Вы успешно зарегистрировались.</p></div>";
} else if (is_wp_error($user)) {
// Произошла ошибка при добавлении пользователя
$signUpError = "<p style='color:#FF0000; text-align:left;'><strong>ERROR</strong>: There's been a problem adding the user</p>";
}
}
}
?>
<h3>Создайте свою учетную запись</h3>
<form action="" method="post" name="user_registeration">
<label>Имя пользователя <span class="error">*</span></label>
<input type="text" name="username" placeholder="Введите ваше имя пользователя" class="text" required /><br />
<label>Электронная почта <span class="error">*</span></label>
<input type="text" name="useremail" class="text" placeholder="Введите вашу электронную почту" required /><br />
<label>Пароль <span class="error">*</span></label>
<input type="password" name="password" class="text" placeholder="Введите ваш пароль" required /><br />
<input type="submit" name="user_registeration" value="Зарегистрироваться" />
</form>
<?php
// Выводим сообщения об ошибках или успехе
if (isset($signUpError)) {
echo '<div>' . $signUpError . '</div>';
}
if (isset($successMessage)) {
echo $successMessage;
}
?>
Объяснение внесённых изменений:
-
Проверка результата регистрации: Мы добавили условие, чтобы проверить, является ли результат
wp_insert_user()
числом. Если да, это означает, что пользователь был успешно зарегистрирован, и мы создаем сообщение об успехе. -
Вывод сообщения об успешной регистрации: Если регистрация прошла успешно, пользователь увидит сообщение: "Поздравляем! Вы успешно зарегистрировались."
-
Вывод ошибок: Все предупреждающие сообщения об ошибках, если таковые имеются, будут отображаться в интерфейсе пользователя.
Эти изменения обеспечат хороший пользовательский интерфейс, предоставляя пользователю информацию о том, что именно произошло после регистрации.