Redirecting Wordpress's Login/Register page to a custom login/registration page

32,159

Solution 1

For this you need to redirect login/registration page to your custom pages. So, Write this code in your functions.php file Under your activated theme folder. Pass your custom page path as a Argument.

 add_action('init','possibly_redirect');

function possibly_redirect(){
 global $pagenow;
 if( 'wp-login.php' == $pagenow ) {
  wp_redirect('http://google.com/');
  exit();
 }
}

Solution 2

To restrict direct access only for 'wp-login.php', without POST or GET request (useful for custom ajax login forms), I use the advanced function:

function possibly_redirect(){
  global $pagenow;
  if( 'wp-login.php' == $pagenow ) {
    if ( isset( $_POST['wp-submit'] ) ||   // in case of LOGIN
      ( isset($_GET['action']) && $_GET['action']=='logout') ||   // in case of LOGOUT
      ( isset($_GET['checkemail']) && $_GET['checkemail']=='confirm') ||   // in case of LOST PASSWORD
      ( isset($_GET['checkemail']) && $_GET['checkemail']=='registered') ) return;    // in case of REGISTER
    else wp_redirect( home_url() ); // or wp_redirect(home_url('/login'));
    exit();
  }
}
add_action('init','possibly_redirect');

Solution 3

The correct action hook is login_init that only fires on wp-login.php.

Here, no ?action=action-name is being requested, so it's the main login page:

add_action('login_init', function(){
    if( !isset( $_GET['action'] ) ) {
        wp_redirect( 'http://example.com' );
    }
});

For all requests, we can use a specific hook login_form_ACTION-NAME, ie, postpass, logout, lostpassword, retrievepassword, resetpass, register and login. Example:

add_action('login_form_register', function(){
    wp_redirect( site_url('custom-registration/') );
});

Solution 4

If you're making use of a custom login page, but still using wp_login_form(), be aware that the form will POST to wp-login.php, so you will want to check if $_POST is empty before redirecting.

function prefix_wp_login_redirect() {
  global $pagenow;  
  if( $pagenow == 'wp-login.php' && empty($_POST)) {
    auth_redirect();
    exit();
  }
}

Solution 5

You might be able to latch onto the login_head hook and issue a redirect there.

Share:
32,159

Related videos on Youtube

Bruno De Barros
Author by

Bruno De Barros

Updated on January 06, 2020

Comments

  • Bruno De Barros
    Bruno De Barros over 4 years

    I have a website, with a user system. I want to integrate wordpress's user system into that website's, but I still want to use the website's register/login pages. I don't want anybody to be able to login or register using Wordpress's login or registration forms. Instead, when they're try to access the login/registration pages in Wordpress, I want those pages to redirect them to my own login/registration pages.

    Is there any way of doing this? I've tried Google, but all I could find was redirection AFTER the user logs in or registers, which is not what I want.

    Thank you in advance.

  • this. __curious_geek
    this. __curious_geek over 14 years
    Where shall I register add_action call? where do I call this ? excuse me for I'm a .Net developer.
  • nickohrn
    nickohrn over 14 years
    You have two options. Either throw the above code in a plugin or create a functions.php in your themes' folder and add the above.
  • thinice
    thinice over 11 years
    It should be added that doing this disables the ability to log-out unless explicitly done from the target landing page.
  • Mayeenul Islam
    Mayeenul Islam almost 11 years
    the same thing doing with the register page, not working for me: if( 'wp-login.php?action=register' == $pagenow ) { wp_redirect('http://google.com/'); exit(); } Not working for me.
  • nickohrn
    nickohrn over 10 years
    Mayeenul, you need to just test 'wp-login.php' == $pagenow and if you need to specifically detect the registration action, add a check like (isset($_GET['action']) && 'register' === $_GET['action'])
  • Nathan Pond
    Nathan Pond over 7 years
    This is good, but if the custom login page is using wp_login_form() then you need to also check to make sure this request isn't being posted, otherwise all login attempts will redirect back to the custom login form (without logging in). Something like if( 'wp-login.php' == $pagenow && $_SERVER['REQUEST_METHOD'] == 'GET')
  • piersb
    piersb about 7 years
    The accepted answer doesn't work for those of us using wp_login_form() - use this one instead.