在一个列表中显示来自两个角色的用户

时间:2015-01-14 作者:Sean

几天前我问了一个问题(link) 关于我在WP 4.1和a中遇到的问题WP_User_Query 我使用自定义元数组运行。我当前的代码在升级到4.1之前一直有效:

    if( is_array($user->role) == true){ 
    $staff_role=esc_attr(implode(", ",$user->role));
    } else {$staff_role=$user->role;};

    $pm = array(
    \'orderby\' => \'display_name\',
    \'meta_query\' => array(
                    \'relation\' => \'OR\',
                        array(
                            \'key\' => $staff_role,
                            \'value\' => \'program_manager\',
                            \'compare\' => \'LIKE\'
                            ),
                        array(
                            \'key\' => $staff_role,
                            \'value\' => \'administrator\',
                            \'compare\' => \'LIKE\'
                            )
                    )
    );
// User Queries
    $program_manager = new WP_User_Query( $pm );
// User Counts
    $pm_count = count($program_manager->results);
// User Loop
    if ( ! empty( $program_manager->results ) ) {
        echo \'<h2>Program Managers (\' . $pm_count . \')</h2>\';
        foreach ( $program_manager->results as $user ) {
            echo \'<li>\',
            pods_user_profile_display($user);
            echo \'</li><div class="clearboth"></div><br />\';
    }
    echo \'<hr />\';
    } else {
    echo \'<h2>Program Managers</h2>No managers found.\';
    }
然而,我没有得到答案。

希望这个新问题能得到答案:

我想在我的网站上的目录中显示一个角色为“管理员”或“程序管理员”的WP用户列表。例如,我有1个administrator 和12program_managers、 我希望列表显示所有13个按排序的用户display_name

1 个回复
最合适的回答,由SO网友:Privateer 整理而成

由于用户的角色存储在(dbprefix)\\u功能中,因此我会尝试获取数据库前缀,然后使用它来获取具有正确功能的人员(大写字母位于序列化数组中):

global $wpdb;
$prefix = $wpdb->prefix;
$meta_name = "{$prefix}capabilities";

\'meta_query\' => array(
                \'relation\' => \'OR\',
                    array(
                        \'key\' => "{$meta_name}"
                        \'value\' => \'program_manager\',
                        \'compare\' => \'LIKE\'
                        ),
                    array(
                        \'key\' => "{$meta_name}",
                        \'value\' => \'administrator\',
                        \'compare\' => \'LIKE\'
                        )
                )
);
以上内容应为您提供作为程序管理员或管理员的所有用户。

我看到的可能破坏您的代码的情况如下:

if( is_array($user->role) == true){ 
    # This will break your meta query as it could create "subscriber, administrator" as a key
    # and your meta query does \'key\' => $staff_role
    $staff_role=esc_attr(implode(", ",$user->role));
} else {
    $staff_role=$user->role;
}
用户获得第二个角色后,查询开始查找包含逗号分隔角色的键值。当然,也许这就是你想要的,但我会仔细检查数据库,因为这样一个键会有点奇怪。

结束

相关推荐