使用错误密码时,自定义登录重定向到wp-admin

时间:2013-08-14 作者:Roel Veldhuizen

当用户无法正确猜测其凭据时,我的自定义登录表单将重定向到wp admin登录。如何将用户重定向到当前表单?当然要显示正确的错误?

代码如下:(与WordPress手册上的代码相同)

$args = array(
        \'echo\' => true,
        \'redirect\' => site_url( $_SERVER[\'REQUEST_URI\'] ), 
        \'form_id\' => \'loginform\',
        \'label_username\' => __( \'Username\' ),
        \'label_password\' => __( \'Password\' ),
        \'label_remember\' => __( \'Remember Me\' ),
        \'label_log_in\' => __( \'Log In\' ),
        \'id_username\' => \'user_login\',
        \'id_password\' => \'user_pass\',
        \'id_remember\' => \'rememberme\',
        \'id_submit\' => \'wp-submit\',
        \'remember\' => true,
        \'value_username\' => NULL,
        \'value_remember\' => false ); 

wp_login_form( $args );

2 个回复
最合适的回答,由SO网友:Maruti Mohanty 整理而成

编写自定义登录页面时,需要注意错误,否则WordPress会将页面重定向到/wp admin或wp login。php错误的密码或空凭据。请按照以下步骤解决此问题:--

请在主题的功能中使用以下内容。php文件:-

/**
 * Function Name: front_end_login_fail.
 * Description: This redirects the failed login to the custom login page instead of default login page with a modified url
**/
add_action( \'wp_login_failed\', \'front_end_login_fail\' );
function front_end_login_fail( $username ) {

// Getting URL of the login page
$referrer = $_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\' ) ) {
    wp_redirect( get_permalink( LOGIN_PAGE_ID ) . "?login=failed" ); 
    exit;
}

}

/**
 * Function Name: check_username_password.
 * Description: This redirects to the custom login page if user name or password is   empty with a modified url
**/
add_action( \'authenticate\', \'check_username_password\', 1, 3);
function check_username_password( $login, $username, $password ) {

// Getting URL of the login page
$referrer = $_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\' ) ) { 
    if( $username == "" || $password == "" ){
        wp_redirect( get_permalink( LOGIN_PAGE_ID ) . "?login=empty" );
        exit;
    }
}

}
// Replace my constant \'LOGIN_PAGE_ID\' with your custom login page id.
并在自定义登录页面文件中显示以下内容,以显示相应的错误:--

<div class="wp_login_error">
    <?php if( isset( $_GET[\'login\'] ) && $_GET[\'login\'] == \'failed\' ) { ?>
        <p>The password you entered is incorrect, Please try again.</p>
    <?php } 
    else if( isset( $_GET[\'login\'] ) && $_GET[\'login\'] == \'empty\' ) { ?>
        <p>Please enter both username and password.</p>
    <?php } ?>
</div>          

SO网友:Kumar

你有没有试着回应

site_url($_SERVER[\'REQUEST_URI\'] );
这个很好用,我用得很成功

\'redirect\' => get_permalink()
Update对于登录失败时的重定向,您必须使用wp_login_failed 钩子和一些自定义代码将用户重定向到带有适当警告消息的所需页面。

add_action(\'wp_login_failed\', \'_login_failed_redirect\');

function _login_failed_redirect( $username ){

  //get your page by slug and then its permalink
  $post = get_page_by_path(\'slug\');

  //Or you can get your page ID, if you are assigning a custom template to a page.
  $redirect_page = !empty ( $post ) ? get_permalink ( $post->ID ) : site_url();

  $user = get_user_by(\'login\', $username );

  if(!$user){
    //Username incorrect
    wp_redirect($redirect_page .\'?login_error=1\');

  }else{
   //Username Password combination incoorect
    wp_redirect($redirect_page .\'?login_error=2\');
  }

}
如果您正在重定向到某个模板,则很容易得到login\\u错误并相应地显示它。

结束

相关推荐

无法加载wp-admin/admin-ajax.php

我遇到了一个奇怪的问题。昨天一切都很顺利。现在突然,我的ajax请求都不起作用了。问题是(我在firebug控制台中发现):无法加载资源:/wp管理/管理ajax。php所以admin-ajax.php 文件未成功。我已经仔细核对了以下内容:指向的urladmin-ajax.php 是正确的,没有问题不只是“我自己的脚本”不起作用,我已经安装了buddypress,来自buddypress的所有ajax请求也会出现同样的错误我直接键入的urladmin-ajax.php 进入浏览器后,google chr