Кастомный вход на сайт. Как обработать условие «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).
Как обрабатывать результат (ошибка/успех) этого кода?
Дак запишите сообщение об ошибке или успехе в сессию, потом выводите где вам угодно. Главное не забывать что после вывода их надо удалить из сессии. Получить же ошибки не можете, потому что делаете редирект. Вот они и исчезают из памяти.