我已经在 wp_login_form()
函数的帮助下创建了登录模板。
现在,如果用户输入错误的密码或用户名,它将使用以下代码将我重定向到参数 login=failed
的同一页面:
add_action( 'wp_login_failed', 'front_end_login_fail' );
function front_end_login_fail( $username ) {
$_SESSION['uname'] = $username;
// Getting URL of the login page
$referrer = $_SERVER['HTTP_REFERER'];
$login_failed_error_codes = array( 'empty_password', 'empty_email', 'invalid_email', 'invalidcombo', 'empty_username', 'invalid_username', 'incorrect_password' );
// 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( 93 ) . "?login=failed" );
exit;
}
}
现在这个功能工作正常,但现在根据 wordpress 功能提供如下:
1.如果用户输入true用户名但错误密码,它将显示错误为"incorrect_password"
2.如果用户输入false用户名但输入true密码,它将显示错误为"invalid_username"
3.如果用户输入错误用户名但错误密码,它将显示错误为"invalidcombo"
添加等等请检查代码中的变量$login_failed_error_codes... 我进行了一些搜索。我得到了一些名为“WP_error”的类。但我不知道它如何使用这段代码。
我只是被困在如何将 WP_error 对象从 wp-login.php 传递到我的 csutom 模板?
谢谢...任何帮助都是可取的。
最佳答案
我想我理解您要实现的目标。您希望能够在您自己的自定义登录页面上显示登录失败的原因。我假设您已经知道如何获取 $_GET
参数,因为您正在使用它来传递您的 login_failed
参数。
改为使用 login_redirect
过滤器:
add_filter('login_redirect', 'my_login_redirect', 10, 3);
function my_login_redirect($redirect_to, $requested_redirect_to, $user) {
if (is_wp_error($user)) {
//Login failed, find out why...
$error_types = array_keys($user->errors);
//Error type seems to be empty if none of the fields are filled out
$error_type = 'both_empty';
//Otherwise just get the first error (as far as I know there
//will only ever be one)
if (is_array($error_types) && !empty($error_types)) {
$error_type = $error_types[0];
}
wp_redirect( get_permalink( 93 ) . "?login=failed&reason=" . $error_type );
exit;
} else {
//Login OK - redirect to another page?
return home_url();
}
}
关于php - 如何在自定义登录表单中检索 wp 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31066775/