我认为,它覆盖所有用户的原因是您如何评估用户角色(以及何时评估)。
您正在运行中的用户角色检查mb_current_user_role() 该函数假设用户已登录,否则会设置$user (最初)至null.
但当从mb_authenticate_user() 函数,则用户未登录,因此每次运行时,它都会返回null-无论用户是否具有角色。(希望我解释得足够好,有道理。)
此外,除了WP允许用户使用多个角色(因此使用数组),并且不能保证角色数组只包含一个角色之外,以下行存在问题:
$user = $user[0];
如果用户没有角色,则不会设置索引0。如果您在启用调试模式的情况下运行此程序,我怀疑您会收到关于此问题的PHP通知。
因此,您需要检查该值是否已设置。
我对您的mb_current_user_role() 函数来解决这些问题。首先,它接受两个参数,第一个参数是用户ID,因此您的authenticate函数应该传递用户ID(而不是出于上述原因检查登录的用户)。
function mb_current_user_role( $mb_user_id = false, $echo = false ) {
$user = ( $mb_user_id ) ? array_values( wp_get_current_user()->roles ) : false;
$user = ( isset( $user[0] ) ) ? $user[0] : false;
if( $echo ) {
echo $user;
} else {
return $user;
}
}
现在,在身份验证函数中,而不是:
if( empty( mb_current_user_role() ) ) {
评估如下:
if ( false === mb_current_user_role( $mb_user_id->ID ) ) {
你可以使用另一个答案的方法
mb_current_user_role() 全部,但正在修复
mb_current_user_role()\'s问题为您提供了一个可用的实用程序函数,您也可以在其他实例中使用。