問題描述

我需要獲得與使用者相關聯的角色 – 而不是 「當前登入的使用者」 。

我正在使用 Buddypress(不是這應該是關於這個問題的性質),我在 bp_members()迴圈。

在任何給定的時間,如何檢索在迴圈中報告的使用者的角色?

謝謝。

最佳解決方案

使用使用者 ID 和 WP_User

$user = new WP_User( $user_id );
print wp_sprintf_l( '%l', $user->roles );

Update

/**
 * Get user roles by user ID.
 *
 * @param  int $id
 * @return array
 */
function wpse_58916_user_roles_by_id( $id )
{
    $user = new WP_User( $id );

    if ( empty ( $user->roles ) or ! is_array( $user->roles ) )
        return array ();

    $wp_roles = new WP_Roles;
    $names    = $wp_roles->get_names();
    $out      = array ();

    foreach ( $user->roles as $role )
    {
        if ( isset ( $names[ $role ] ) )
            $out[ $role ] = $names[ $role ];
    }

    return $out;
}

用法示例:

print '<pre>'
    . htmlspecialchars(
        print_r( wpse_58916_user_roles_by_id(1), TRUE )
        )
    . '</pre>';

Array
(
    [administrator] => Administrator
)

次佳解決方案

如果 bp_members 返回一個 WP_User 物件陣列,則每個應該都有一個包含使用者角色陣列的屬性 roles

否則,您可以使用 get_user_meta 作為鍵 wp_capabilities,它將返回一個 role => capability 對陣列:

<?php
$caps = get_user_meta($user->ID, 'wp_capabilities', true);
$roles = array_keys((array)$caps);

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。