你的问题是
您正在测试if($user->ID){
, i、 e.我们找到的b2b\\U帐户用户对象是否有ID。它总是有ID。你可能想把它和$ID
.你需要return true
在成功案例中,即在for循环之后,如果没有找到用户但是
您忽略了$allow
参数你可以以return $allow
相反,如果前一个筛选器离开,甚至不进行受限组检查更有意义$allow = false
或者返回了一个WP\\u错误,对我来说,获取用户的当前组并查看是否包含b2b\\u帐户更有意义,而不是获取所有b2b\\u帐户用户并对照ID列表进行检查所以我建议
add_filter( \'allow_password_reset\', \'filter_function_name_2698\', 10, 2 );
function filter_function_name_2698( $allow, $ID ) {
if ( ( ! $allow ) || is_wp_error( $allow ) ) {
// Rejected by a previous filter
return $allow;
}
// Read the user\'s roles
$user_data = get_userdata( $ID );
if ( $user_data ) {
$user_roles = $user_data->roles;
if ( $user_roles && in_array( \'b2b_account\', $user_roles, true ) ) {
// b2b_accounts may not reset passwords
return false;
}
}
// else user doesn\'t exist
return true;
}
(使用角色检查代码
from here, 加上额外的可能不必要的空检查)