防止在自定义WordPress登录表单上重定向

时间:2013-05-02 作者:Brad

我创建的自定义登录表单有点问题。

<?php if (!(current_user_can(\'level_0\'))){ ?>
  <div class="login-form">
    <form action="<?php echo get_option(\'home\'); ?>/wp-login.php" method="post" target="_blank">
      <p>
        <label for="log" id="user">Username</label>
    <input type="text" name="log" id="log" value="<?php echo wp_specialchars(stripslashes($user_login), 1) ?>" size="20" />
      </p>
      <p>
        <label for="password" id="pass">Password</label>
        <input type="password" name="pwd" id="pwd" size="20" />
      </p>
        <input type="submit" name="submit" value="Login" class="button" />
      <p>
        <label for="rememberme"><input name="rememberme" id="rememberme" type="checkbox" checked="checked" value="forever" /> Remember me</label>
        <input type="hidden" name="redirect_to" value="<?php bloginfo(\'url\');?>/login-tournament/tournaments/"/>
     </p>
    </form>
  </div>
  <div id="recovertext"><a href="<?php echo get_option(\'home\'); ?>/wp-login.php?    action=lostpassword">Recover password</a></div>
  <div id="loginbox"><a href="<?php bloginfo(\'url\'); ?>/register">Not registered yet?</a></div>
<?php } else { ?>
  <p class="login-text">You\'re already logged in.<br>Click here to view the <a href="http://MY-CUSTOM-REDIRECT-URL.com" target="_blank">Tournaments</a> page or you can <a href="<?php echo wp_logout_url( get_permalink() ); ?>" title="Logout"> Logout</a></p>
<?php }?>
成功登录将用户重定向到自定义URL,并在新窗口中打开自定义URL。(这工作正常)

我遇到的问题是,如果用户输入了错误的凭据,它们将被重定向到默认凭据wp-login.php 类型我需要用户停留在当前页面上并显示错误消息。我确实找到了这个snippet to prevent the redirect 它确实可以工作,但它会在新窗口中打开同一页。当输入错误的详细信息时,是否可以防止新窗口打开。(我仍然需要在成功登录时打开新窗口)

此外,如果在单击登录按钮时根本没有输入登录详细信息,它也会将用户发送到默认值wp-login.php 页是否有可能防止这种情况发生?

1 个回复
SO网友:JanesOosthuizen

有同样的问题。这为我解决了问题。

add_action( \'wp_login_failed\', \'my_front_end_login_fail\' );
function my_front_end_login_fail( $username ) {
     $referrer = $_SERVER[\'HTTP_REFERER\'];
     if ( !empty($referrer) && !strstr($referrer,\'wp-login\') && !strstr($referrer,\'wp-admin\')     ) {
          wp_redirect( $referrer . \'?login=failed\' );
          exit;
     }
}

结束

相关推荐