jilseego
  • 0
Новичок

Перенаправить на пользовательский URL при сбое регистрации?

  • 0

Когда я хочу перенаправить пользователя после успешной регистрации, я просто использую фильтр-хук «registration_redirect». Как насчет того, когда регистрация не удалась, какой фильтр-хук мне следует использовать? Я просмотрел wp-login.php, но не нашел ни одного хука фильтра/действия, который я мог бы использовать. Как мне это сделать?

Share
  1. Почему не проходит регистрация? Обычно «сбой» означает, что они возвращаются к регистрационной форме для исправления ошибки.

    • 0
  2. Вы можете добавить перенаправление htaccess или попробовать тему моего плагина входа: http://wordpress.org/extend/plugins/theme-my-login/. Он имеет параметры для пользовательского перенаправления.

    • 0
  3. Вместо htaccess или плагина есть более сложное решение. Для тех, кто интересуется этой темой, вот мой код для перенаправления после (точно до) неудачной попытки повторной загрузки.

    Почему раньше? Перед попыткой регистрации WordPress проверяет имя пользователя и адрес электронной почты, не являются ли они пустыми, не находятся ли они уже в БД и правильно ли указаны адрес электронной почты или имя пользователя. Если это так, он сообщает об ошибках, и вы можете подключиться к функции сразу после этой проверки.

    do_action( 'register_post', $sanitized_user_login, $user_email, $errors );
    

    Следующий шаг — unhookable — это попытка создать нового пользователя. Если это не удается, появится другое сообщение об ошибке, и вы будете перенаправлены на стандартный экран wp_login.php.

    Но есть но. Этот процесс, следующий шаг, просто вызывает wp_insert_user(), и эта функция дает сбой только для empty_user_login, существующего_пользователя_логина и существующего_пользователя_электронной почты — в противном случае она завершается успешно. И если вы внимательно прочитали, все эти переменные проверяются перед вызовом этой функции (эта двойная проверка логична, поскольку вы можете вызвать wp_insert_user прямо из вашего плагина).

    Таким образом, если процесс регистрации завершается сбоем после упомянутого хука, он завершается сбоем, потому что что-то не так с вашей установкой WordPress, и, таким образом, это не является сбоем вашей функции перенаправления, подключенной к процессу регистрации.

    И, наконец, некоторый код для тех, кто просто хочет скопировать и вставить код для перенаправления на пользовательскую страницу после неудачного входа в систему:

    add_action('register_post', 'binda_register_fail_redirect', 99, 3);
    
    function binda_register_fail_redirect( $sanitized_user_login, $user_email, $errors ){
        //this line is copied from register_new_user function of wp-login.php
        $errors = apply_filters( 'registration_errors', $errors, $sanitized_user_login, $user_email );
        //this if check is copied from register_new_user function of wp-login.php
        if ( $errors->get_error_code() ){
            //setup your custom URL for redirection
            $redirect_url = get_bloginfo('url') . '/registrace';
            //add error codes to custom redirection URL one by one
            foreach ( $errors->errors as $e => $m ){
                $redirect_url = add_query_arg( $e, '1', $redirect_url );    
            }
            //add finally, redirect to your custom page with all errors in attributes
            wp_redirect( $redirect_url );
            exit;   
        }
    }
    
    • 0

Оставить ответ

You must login to add an answer.