ユーザーの役割を取得する方法


15

「現在ログインしているユーザー」ではなく、ユーザーに関連付けられたロールを取得する必要があります。

私はBuddypressを使用しており(この質問の性質に関係する必要はありません)、bp_members()ループにいます。

ループ内でレポートしているユーザーのロールをいつでも取得するにはどうすればよいですか?

ありがとう。

回答:


17

ユーザーIDを使用してWP_User

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

更新

/**
 * 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
)

@toschoに感謝します-期待していたものが得られなかったようです。エディター、ブランク/ヌル値、およびbbp_participantを入手しました。私たちが使用している役割は管理者、編集者、作成者、または購読者のみであるため、私は期待していました。
-frank13

@ frank13アップデートをご覧ください。
FUXIA

2
@toschoに感謝します...これは、もっと簡単に入手できると思っていたデータ値を取得するための多くのコードです。
-frank13

とても助かります、ありがとう!ユーザーの役割にもっと直接アクセスできないのはとても悲しいことであり、混乱を招きます。「can user」機能は、ほとんどの人が望むものとは逆の機能を果たします。
マイク

7

オブジェクト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);

$ rolesは配列になります。$user->IDの役割を取得したいと考えています。システムにユーザーがいないため、1つのロールのみに複数のロールが割り当てられます。
frank13

$roles[0]、完了。
chrisguitarguy

わかりました、ありがとう@ChristopherDavis ... $ roles [0]は、リスト内のすべてのユーザーに対して全面的に「0」を返します
-frank13

@chrisguitarguyは$ roles [0]がまだ動作しますか?
-T.Todua

0

私が理解しているように、それはおそらく長年にわたって変化しましたが、今ではそうではありません'wp_capabilities'。コアWPファイルを調べて、現在どのように処理しているか、これに対する新しい解決策を見つけました。私が今使用しているコードは次のとおりです。

global $wpdb;
$cap = get_user_meta( $wp_user_id, $wpdb->get_blog_prefix() . 'capabilities', true );

$cap 次に、たとえば、連想配列として提供されます。

{
    "administrator": true
}

または

{
    "subscriber": true
}

したがって、あなたの場合は、おそらく配列のキーを取得する必要があります:

$caps_array = array_keys( $cap );

それからすべてを取得します。ユーザーが管理者の役割を持っているかどうかを確認する必要があったので、チェックしました:

if ( is_array( $cap ) && !empty( $cap['administrator'] ) ) { return true; }

WP_Userオブジェクト全体ではなくユーザーIDがあり、オブジェクトを作成するソリューションを使用したくありませんでしたuser。私がチェックしたように、get_user_metaこの正確なパラメーターをチェックするためにデータベースに直接行くので、これは最速でリソース面でのルートになるはずです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.