WordPress как на ладони
Очень Удобный и Быстрый Хостинг для сайтов на WordPress. Пользуюсь сам и вам рекомендую!

Кастомный вход на сайт. Как обработать условие «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).
Как обрабатывать результат (ошибка/успех) этого кода?

0
Александр
4.6 лет назад 12
  • 0
    Maestro42 bagroup.pro

    Дак запишите сообщение об ошибке или успехе в сессию, потом выводите где вам угодно. Главное не забывать что после вывода их надо удалить из сессии. Получить же ошибки не можете, потому что делаете редирект. Вот они и исчезают из памяти.

    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация