web-dev-qa-db-fra.com

Interroger les utilisateurs ayant les mêmes rôles générés dynamiquement que l'utilisateur actuel

Je dois vérifier si les utilisateurs ont les rôles exacts dans le but de permettre aux utilisateurs de modifier les publications les uns des autres s'ils ont les mêmes deux rôles.

Un rôle 'X' est un rôle commun, et l'autre rôle 'Y' est unique - je le génère de manière dynamique en fonction d'une méta-valeur utilisateur.

Le second rôle est le rôle principal de ce que j'essaie de faire, regrouper les utilisateurs et leur donner accès aux publications les unes des autres. Le premier rôle est le rôle associé à la gestion du type de publication ciblée.

Le problème est maintenant le suivant: les utilisateurs peuvent éditer tous les autres utilisateurs avec les publications du rôle X, peu importe le rôle qu'ils occupent ou non .... ce dont j'ai besoin, c'est qu'ils ne peuvent éditer que s'ils ont les deux rôles, pas seulement l'un . c'est le code:

function get_current_user_role() {
    global $wp_roles;
    $current_user = wp_get_current_user();
    $roles = $current_user->roles;
    $role = array_shift($roles);
    return isset($wp_roles->role_names[$role]) ? translate_user_role($wp_roles->role_names[$role] ) : false;
}

$userRole = get_current_user_role();
$contributors = get_users(array('role'=> $userRole ));
$contributors_ids = array();

foreach ($contributors as $user) {
    $contributors_ids[] =  $user->ID;
}
        $args = apply_filters( 'moe_cars_args', array(
            'post_type'           => 'cars',
            'offset'              => ( max( 1, get_query_var('paged') ) - 1 ) * $posts_per_page,
            'orderby'             => 'date',
            'order'               => 'desc',
            "author"        => implode( ',', $contributors_ids )
        ) );
1
moe copperfield

Pour ce faire, vous devez d’abord obtenir tous les rôles d’utilisateur actuels, X et Y (s) ...

function get_current_user_roles(){
    global $wp_roles;

    $current_user = wp_get_current_user();
    $user_groups  = groups_get_user_groups( $current_user->ID );
    $user_roles   = isset( $current_user->roles['X'] ) ? array( 'X' ) : array();

    // Let's get all Y dynamic user roles...
    foreach ( $user_groups['groups'] as $id ) {
        $group        = groups_get_group( array( 'group_id' => $id ) );
        $user_roles[] = 'bp_gm_' . $group->slug . '__' . $group->id;
    }

    // Let's translate the roles...
    if ( ! empty( $user_roles ) ) {
        $translated_user_roles = array();

        // I don't get why you have to check against `$wp_roles`...
        foreach ( $user_roles as $role ) {
            if ( isset( $wp_roles->role_names[ $role ] ) ) {
                $translated_user_roles[] = translate_user_role( $role );
            }
        }
    }

    return $translated_user_roles;
}

Maintenant que nous pouvons get_current_user_roles(), implémentons nos spécifications ...

$user_roles = get_current_user_roles();

if ( count( $user_roles ) > 1 && isset( $user_roles['X'] ) ) {
    $args = apply_filters( 'moe_cars_args', array(
        'post_type' => 'cars',
        'offset'    => ( max( 1, get_query_var('paged') ) - 1 ) * $posts_per_page,
        'orderby'   => 'date',
        'order'     => 'desc',
        'author'    => implode( ',', get_users( array(
            'role'   => $user_roles,
            'fields' => 'ID',
        ) ) ),
    ) );
}

J'espère que ça répond à ta question.

1
ClemC