防止重置密码特定的用户角色

时间:2020-02-05 作者:Baim Quraisy

我有用户角色“b2b\\U帐户”。我想阻止具有b2b\\U帐户角色的用户重置其密码。

这是我的代码

add_filter( \'allow_password_reset\', \'filter_function_name_2698\', 10, 2 );
    function filter_function_name_2698( $allow, $ID ){

        $users = get_users(array(
            \'role\' => \'b2b_account\',
        ));
        foreach($users as $user){
            if($user->ID){

                return false;

                }
            }
    }
我使用过滤器allow\\u password\\u reset,但它阻止所有用户。谢谢你的帮助。

1 个回复
最合适的回答,由SO网友:Rup 整理而成

你的问题是

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

相关推荐

我应该使用哪个钩子通过配置文件更新和密码重置来捕获$_POST(‘password’)

我需要重新刷新用户在Wordpress注册期间输入的密码(我使用WooCommerce)我可以通过以下方式成功地做到这一点:add_action( \'user_register\', \'myplugin_registration_save\', 10, 1 ); function myplugin_registration_save( $user_id ) { if ( isset( $_POST[\'password\'] ) ) { upd