Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

When I want to redirect the user after successful registration, I just use "registration_redirect" filter hook. How about when registration fails, which filter hook should I use? I looked into wp-login.php but I didn't see any filter/action hook that I could use. How do I go about this?

share|improve this question
    
Why would registration fail? Normally, a "failure" means that it takes them back to the registration form to fix the error. –  Otto Jul 2 '11 at 15:35
    
@Otto: Mmmm, because I have a custom reg form in a normal page. So I want it to redirect back to that page when registration fails. As of now, it redirects to WP's default reg page which is inconsistent. –  jilseego Jul 2 '11 at 16:32

2 Answers 2

up vote 1 down vote accepted

You could add an htaccess redirect or try out the theme my login plugin: http://wordpress.org/extend/plugins/theme-my-login/. It has options for custom redirection.

share|improve this answer

There is an more sophisticated solution instead of htaccess or plugin. For those interested in this topic, there's my code to redirect after (exactly before) unsuccessfull resitration attempt.

Why before? Before an attempt for registration, WordPress checks for an username and email address, whether they are not empty, whether they are not already in DB, and whether email nor username are in correct. If so, it reports errors and you can hook to a function right after this check.

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

Next step - unhookable - is an attempt to create a new user. If this fails, that there is an another error message and you'll be redirected to standard wp_login.php screen.

But, there is an but. This process, Next step, just calls wp_insert_user() and this function fails only on empty_user_login, existing_user_login and existing_user_email - otherwise it end successfully. And if you've read carefully, all these variables are checked before this function is called (this double check is logical as you can call wp_insert_user directly from your plugin).

So if register process fails after mentioned hook, it fails because there's something wrong with your WordPress installation and so, it is not a fail of your redirection function hooked to register process.

And finally some code for those, ho just want to copy and paste a code for redirection to custom page after login fails:

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;   
    }
}
share|improve this answer
    
Thanks. It's worth noting that to redirect the user on a successful registration, one has to add_action for login_head and check whether $_SERVER['REQUEST_URI'] is /wp-login.php?checkemail=registered, and redirect to the correct one. Supposably there's a filter named registration_redirect, but it doesn't work. –  He Shiming Feb 12 '13 at 8:26
    
Great solution. –  editor Feb 27 '13 at 18:54
    
thanks save me the headeach –  Poxtron Mar 16 '13 at 4:10

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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