Кастомный вход на сайт. Как обработать условие «is_wp_error»?
PHP не знаю, в wordpress залез уже как 3-й день, нужно было создать кастомные страницы входа, регистрации, профиля. На зарубежном сайте - нашел туториал, там делали "шаблон страницы", я же использую иерархию, то есть, просто создал page-login.php, чтобы не нужно было в админке выбирать шаблон. Это я к тому, что когда я вставлял код с туториала для теста - как шаблон страницы, редирект работал, но ошибка тоже не выводилась.
И как обрабатывать ошибки, точнее главное получать их, "данные"?
P.S. Как я понял, разница с шаблоном, что у шаблона страницы (из туториала) get_header(); в самом верху страницы, у меня же <?php get_header('login'); ?> под кодом входа wordpress.
Я пробовал ставить get_header, в самый верх, редирект работал, но на сайт не логинилось, код из туториала тоже не логинит меня на сайт. Подозреваю из-за этого, прочитал у вас тут, что
<b>wp_signon()</b>
Функцию нужно использовать до вывода какого-либо контента (текста, HTML) на страницу, потому что функция устанавливает куки, которые после вывода контента не могут быть установлены...
Почитав ваш форум, в итоге вышло две функции в файле functions.php для входа, реги:
/**
* Вход пользователя
*/
function user_login() {
if($_POST) {
$login_data = array(
'user_login' => $_POST['username'],
'user_password' => $_POST['password'],
'remember' => true,
);
$user_verify = wp_signon( $login_data, false );
if ( is_wp_error($user_verify) ) {
return '<span class="mine">Invlaid Login Details</span>';
} else {
wp_redirect( home_url() );
exit();
}
}
}
/**
* Регистрация нового пользователя
*/
function new_user_registration() {
// Данные переданные в $_POST
$userdata = array(
'user_login' => $_POST['user_name'],
'user_pass' => $_POST['password'],
'user_email' => $_POST['mail'],
'first_name' => $_POST['full_name'],
);
/**
* Проверять/очищать передаваемые поля не обязательно,
* WP сделает это сам.
*/
$user_id = wp_insert_user( $userdata ) ;
if( ! is_wp_error( $user_id ) ) {
$mail = $userdata['mail'];
$from = get_option('admin_email');
$headers = 'From: '.$from . "\r\n";
wp_mail( $mail, '$subject', '$message', $headers ); // Тут я хотел отправить на почту данные новорега
wp_redirect( home_url() ); // Тут хотел сделать редирект; Не работает :)
return true;
} else {
return $user_id->get_error_message();
}
}
На кастомных страницах вызываю эти функции в самом верху, до get_header.
<?php user_login(); ?> // Так же на странице регисрации
<?php get_header('login'); ?>
<main class="page-login__main">
<div class="container page-login__container">
<form class="form form--post form-login" action="" method="POST">
<fieldset class="form__fieldset">
<legend class="form__legend form-login__legend">Вход</legend>
</div>
<label class="form__label form-login__label">
Логин
<input type="text" name="username" class="form__input" data-error="" placeholder="Alex" required>
</label>
<label class="form__label form-login__label">
Пароль
<input type="password" name="password" class="form__input" data-error="" placeholder="*****" required>
</label>
<p class="form-login__hint">Забыли пароль?
<a class="form-login__hint-link" href="<?php echo wp_lostpassword_url( ); ?>">Восстановить!</a>
</p>
<div class="form__footer form-login__footer">
<button class="form__button form-login__button" name="signup" type="submit">Вход</button>
<label class="form__check form__anti-spam">
<input class="form__check-input form__anti-spam-checkbox" type="checkbox" name="no-robot" required>
<span class="form__check-box"></span>
Я не робот
</label>
</div>
</fieldset>
</form>
</div>
</main>
<?php get_footer('login'); ?>
Всё работает, логинит, регает - добавляет пользователя в БЗ. Но остаются кастомные страницы, мне нужно делать редирект при успехе, и выводить ошибки в произвольном месте в моей разметке (html).
Как обрабатывать результат (ошибка/успех) этого кода?
Дак запишите сообщение об ошибке или успехе в сессию, потом выводите где вам угодно. Главное не забывать что после вывода их надо удалить из сессии. Получить же ошибки не можете, потому что делаете редирект. Вот они и исчезают из памяти.