您的代码有一些问题:
您正在使用不推荐使用的函数get_user_by_email你用错钩子了wp_authenticate您可以使用此插件https://wordpress.org/plugins/wp-email-login/
或
您可以使用此代码
function wpsc_authenticate_user_by_email( $user, $username, $password ) {
// Bailout
if( ! is_frontend_login_form() ){
return $user;
}
$login_page = strtok( $_SERVER["HTTP_REFERER"], \'?\' );
//check for valid inputs
if( $username == "" || $password == "" ) {
wp_redirect( $login_page . "?login=empty" );
exit;
}
// get user by email
if ( is_email( $username ) ) {
$user = get_user_by( \'email\', $username );
// validate user
if ( $user && wp_check_password( $password, $user->user_pass, $user->ID ) ) {
return $user;
}else{
wp_redirect( $login_page . \'?login=failed\' );
exit;
}
}else{
wp_redirect( $login_page . \'?login=failed\' );
exit;
}
return $user;
}
add_filter( \'authenticate\', \'wpsc_authenticate_user_by_email\', 1, 3 );
在中定义条件
is_frontend_login_form() 检查用户是否来自前端表单。