To achieve this, you first need to get all the current user roles, X and 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;
}
Now that we can get_current_user_roles()
, let’s implement our specifications…
$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',
) ) ),
) );
}
Hope this answers your question.