你的问题是
您正在测试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, 加上额外的可能不必要的空检查)