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');
exit;
}
}
//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) );
exit;
}
}
// 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 );
exit;
}
}
function redirect_after_success_registration () {
$redirect_url=get_bloginfo('url').'/login/?redirect_to='.get_bloginfo('url').'/change-password';
return $redirect_url;
}
add_filter('registration_redirect','redirect_after_success_registration');
I appreciate your ideas and solutions on this one!
Thank you
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?