WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

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

share|improve this question

*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?

share|improve this answer
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 – SPi Mar 26 '14 at 18:26

Your Answer


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.