web-dev-qa-db-ja.com

現在のユーザーと同じ動的に生成されたロールを持つユーザーを照会します。

私は彼らが同じ2つの役割を持っている場合、ユーザーが互いの投稿を編集できるようにする目的で、ユーザーが正確な役割を持っているかどうかを確認する必要があります。

1つのロール'X'は一般的なもので、もう1つのロール'Y'は固有のものです - 私はユーザーメタ値に基づいて動的に生成しています。

2番目の役割は、自分がやろうとしていること、つまりユーザーをグループ化して他のユーザーが投稿にアクセスできるようにするための主要な役割です。

問題は、ユーザーが役割Xを持っているかどうかにかかわらず、役割Xの投稿を持つ他のすべてのユーザーを編集できることです。必要なのは、どちらか一方だけでなく両方の役割がある場合のみ編集できます。 。これはコードです:

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

これを達成するためには、最初に all 現在のユーザロール、 _ x _ および _ 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;
}

get_current_user_roles()ができるようになったので、仕様を実装しましょう。

$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',
        ) ) ),
    ) );
}

これがあなたの質問に答えることを願っています。

1
ClemC