代码的主要问题是wp_login 行动当用户通过wp_signon() 作用这是函数中执行的最后一个操作,紧随wp_set_auth_cookie() 呼叫
因此,首先,用户已经通过身份验证,并且他的身份验证cookie已经设置好,所以他基本上已经登录了。
另一个问题是,在打印任何HTML之前都会调用您的操作-因此,如果您在其中回显任何内容,则在打开之前会打印此输出<html> 标签
如果要阻止用户登录并显示一些错误,应使用authenticate 改为过滤。
在验证用户时调用:
/**
* Filters whether a set of user login credentials are valid.
*
* A WP_User object is returned if the credentials authenticate a user.
* WP_Error or null otherwise.
*
* @since 2.8.0
* @since 4.5.0 `$username` now accepts an email address.
*
* @param null|WP_User|WP_Error $user WP_User if the user is authenticated.
* WP_Error or null otherwise.
* @param string $username Username or email address.
* @param string $password User password
*/
$user = apply_filters( \'authenticate\', null, $username, $password );
因此,您可以这样使用它:
function userLockedControl( $user, $username, $password ) {
// ... rest of your code here
if ($user_is_locked == 0 ) {
return new WP_Error( \'broke\', __( "I\'ve fallen and can\'t get up", "my_textdomain" ) ); // you don\'t need all those functions returning errors and so one - just return an instance of the WP_Error instead of WP_User
}
}
add_filter( \'authenticate\', \'userLockedControl\', 10, 3 );