使用GET_USERS获取多个角色

时间:2012-01-18 作者:blogjunkie

我有一些这样的代码:

$query_args = array();
$query_args[\'fields\'] = array( \'ID\', \'display_name\' );
$query_args[\'role\'] = \'subscriber\';
$users = get_users( $query_args );
foreach ($users as $user) $users_array[$user->ID] = $user->display_name;
我想得到更多的角色,还包括contributor, author 还有一些我用角色Scoper插件创建的自定义角色,例如。Manager, 等等,有什么想法吗get_users?

谢谢

9 个回复
SO网友:birgire

快进到WordPress 4.4-它将支持role__in 属性lucky version number, 因为它将支持role__inrole__not_in 的属性WP_User_Query

因此,要包括订阅者、贡献者和作者角色,我们可以简单地使用:

$users = get_users( [ \'role__in\' => [ \'subscriber\', \'subscriber\', \'author\' ] ] );
检查车票#22212 为了整个故事!

SO网友:Andy Adams

您也可以通过拨打get_users 或使用单个WP_User_Query 通过使用meta_query 参数:

global $wpdb;
$blog_id = get_current_blog_id();

$user_query = new WP_User_Query( array(
    \'meta_query\' => array(
        \'relation\' => \'OR\',
        array(
            \'key\' => $wpdb->get_blog_prefix( $blog_id ) . \'capabilities\',
            \'value\' => \'role_one\',
            \'compare\' => \'like\'
        ),
        array(
            \'key\' => $wpdb->get_blog_prefix( $blog_id ) . \'capabilities\',
            \'value\' => \'role_two\',
            \'compare\' => \'like\'
        )
    )
) );
Themeta_query 从何而来WP_User_Query 处理role 参数,如果您感兴趣的话。

SO网友:blogjunkie

我通过使用以下函数解决了此问题:

function get_clients() { 

    $users = array();
    $roles = array(\'subscriber\', \'custom_role1\', \'custom_role2\');

    foreach ($roles as $role) :
        $users_query = new WP_User_Query( array( 
            \'fields\' => \'all_with_meta\', 
            \'role\' => $role, 
            \'orderby\' => \'display_name\'
            ) );
        $results = $users_query->get_results();
        if ($results) $users = array_merge($users, $results);
    endforeach;

    return $users;
}
然后在我的主题中,我可以这样做:

$users_array = get_clients();

SO网友:ksloan

$users = array_merge( get_users(\'role=subscriber\'), get_users(\'role=contributor\') );
get_users() 返回与作为参数给定的查询字符串相匹配的用户数组。只需运行get_users() 分别查询所需的每个角色并合并结果。然后可以循环通过$users 与其他方式相同。

SO网友:inxilpro

使用的问题array_merge 就是不能使用分页。我真的很喜欢@Andy Adams的解决方案,但如果您正在搜索许多角色,使用他的元查询将导致very slow 查询(内部执行新INNER JOIN 对于每个元查询)。

我的解决方案是使用正则表达式元查询:

<?php

global $wpdb;
$blog_id = get_current_blog_id();

$roles = array(\'editor\', \'administrator\');
$meta_query = array(
    \'key\' => $wpdb->get_blog_prefix($blog_id) . \'capabilities\',
    \'value\' => \'"(\' . implode(\'|\', array_map(\'preg_quote\', $roles)) . \')"\',
    \'compare\' => \'REGEXP\'
);
$user_query = new WP_User_Query(array(
    \'meta_query\' = array($meta_query)
));

?>
这将生成一个类似以下内容的查询:

array(
    \'meta_query\' => array(
        array(
            \'key\' => \'wp_capabilities\'
            \'value\' => \'"(editor|administrator)"\'
            \'compare\' => \'REGEXP\'
        )
    )
);

SO网友:pax

您可以简单地合并更多用户查询结果。假设您想将两者都包括在内AuthorEditor 角色。为每个案例定义查询,然后使用array_merge 合并到单个阵列中。

$xuser_query = new WP_user_query(array( \'role\' => \'Author\'));    
$yuser_query = new WP_user_query(array( \'role\' => \'Editor\'));
$mergedRoles=array_merge($xuser_query->results,$xuser_query->results);

// further on you might want to do some sorting 
// of the resulting array of objects before looping through it:

if (!empty( $mergedRoles->results ) ) {
 foreach ( $mergedRoles->results as $user ) { 
        echo $user->display_name;
      }
 else echo "nada, no users found";

SO网友:Tomas Buteler

函数中的所有参数get_users 是可选的。如果不指定任何内容,则会得到一个数组,其中包含与当前博客的每个用户对应的对象,包括具有自定义角色的用户。

SO网友:Charan Dass
<?php 
$xuser_query = new WP_user_query(array( \'role\' => \'Author\'));    
$yuser_query = new WP_user_query(array( \'role\' => \'Editor\'));

$mergedRoles=array_merge($xuser_query->results,$xuser_query->results);

// further on you might want to do some sorting 
// of the resulting array of objects before looping through it:

if (!empty( $mergedRoles) ) {

    foreach ( $mergedRoles as $user ) { 
        echo $user->display_name;
    }

} else {
    echo "nada, no users found";
}
?>
SO网友:Mohamed Slimane

嗨,你可以用这个简单的方法

$admins = get_users( array(
    \'role__in\'     => array(\'administrator\', \'editor\', \'author\'),
    \'fields\' => array( \'ID\' ),
) );
$admins_ids = wp_list_pluck( $admins, \'ID\' );

$users = get_users(array(
    \'exclude\' => $admins_ids,
    \'fields\' => array( \'ID\' ),
    ) );
$users_ids = wp_list_pluck( $users, \'ID\' );

结束

相关推荐

用户面板(users.php)中的可排序自定义列?

我正在使用Register Plus Redux插件用自定义元数据字段扩充注册表。这些字段显示在每个用户记录详细信息页面的底部,可以使用get\\u the\\u author\\u meta检索这些字段。此外,我能够在用户面板(列表视图)中创建列,并使这些列可排序。问题是,当我单击自定义列标题时,URL中的orderby=值似乎被忽略。换句话说,生成用户列表视图的查询似乎不包括自定义元数据(例如,如果元数据不在用户数据的通常位置,可能需要join语句?)。感觉好像我错过了一步。以下是创建自定义列的代码: