私は彼らが同じ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 )
) );
これを達成するためには、最初に 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',
) ) ),
) );
}
これがあなたの質問に答えることを願っています。