查询与当前用户具有相同动态生成角色的用户

时间:2017-08-25 作者:moe copperfield

我需要检查用户是否有确切的角色,以便允许用户编辑彼此的帖子,如果他们有相同的两个角色。

一个角色\'X\' 是一个普通的角色,另一个角色\'Y\' 是唯一的-我根据用户元值动态生成它。

第二个角色是我要做的事情的主要角色,将用户分组并允许他们访问彼此的帖子,第一个角色是与管理目标帖子类型相关的角色。

现在的问题是:用户可以编辑具有角色X的所有其他用户的帖子,无论他们是否具有角色y。。。。我需要的是,他们只能在拥有两个角色时进行编辑,而不仅仅是其中一个角色。代码如下:

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 个回复
最合适的回答,由SO网友:ClemC 整理而成

要实现这一点,首先需要获取所有当前用户角色,XY(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\',
        ) ) ),
    ) );
}
希望这能回答你的问题。

结束

相关推荐

Adding users to another blog

早上好我想制作一个片段,当在博客中创建一个用户时,将其自动添加到另一个具有创建的相同卷的博客中(始终为1号)。为此,我使用以下方法:$ Blog_id = 1; $ User_id = get_current_user_id (); $ Role = \'publisher\'; Add_action (\'user_register\', add_user_to_blog ($ blog_id, $ user_id, $ role)); 。。。。。但它不起作用,但如果我