I am trying to redirect users after failed and successful registrations and logins. Everything works fine, except the redirection after a successful registration.

Right now, I get redirected to http://mysite.com/register/?login=failed. I can't figure out why I am not redirected to http://mysite/com/login/?redirect_to=mysite.com/change-password which I specified at the bottom using add_action('registration_redirect','redirect_after_success_registration');

Here's my code:

// hook failed login
add_action('wp_login_failed', 'my_frontend_login_fail'); 

function my_frontend_login_fail($username){
    // Get the reffering page, where did the post submission come from?
    $referrer = add_query_arg('login', false, $_SERVER['HTTP_REFERER']);

    // if there's a valid referrer, and it's not the default log-in screen
    if(!empty($referrer) && !strstr($referrer,'wp-login') && !strstr($referrer,'wp-admin')){
        // let's append some information (login=failed) to the URL for the theme to use
        wp_redirect( add_query_arg('login', 'failed', $referrer) );         
    //wp_redirect($referrer . '?login=failed'); 

//hook empty login submit
add_action( 'login_head', 'my_frontend_login_no_pass_no_username' );

function my_frontend_login_no_pass_no_username(){
    $referrer = add_query_arg('login', false, $_SERVER['HTTP_REFERER']);
    if ( (!isset($_REQUEST['user_login']) || ( isset( $_REQUEST['user_login'] ) && trim( $_REQUEST['user_login'] ) == '' ) ) || (!isset($_REQUEST['user_pass']) || ( isset( $_REQUEST['user_pass'] ) && trim( $_REQUEST['user_pass'] ) == '' ) ) ){
        wp_redirect( add_query_arg('login', 'failed', $referrer) ); 

// unsuccessfull registration
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') . '/register';
        //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 );

function redirect_after_success_registration () {
return $redirect_url;

I appreciate your ideas and solutions on this one! Thank you

  • are you sure, you get the error on this line for fail registration? Commented Aug 16, 2018 at 14:29

1 Answer 1


registration_redirect is a filter hook, not an action hook, so your redirect_after_success_registration function never actually gets run.

See this example of how to redirect using the filter:

How to redirect a sucessful registration to a page template?

  • I changed my original hook as you proposed (edits are made in original post), but still the same result. I get redirected to ../register/?login=failed
    – yumba
    Commented Mar 26, 2014 at 18:26

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.