「現在ログインしているユーザー」ではなく、ユーザーに関連付けられたロールを取得する必要があります。
私はBuddypressを使用しています(この質問の本質には関係ありません)。私はbp_members()
ループに入っています。
ループ内で自分が報告しているユーザーの役割をいつでも取得できますか?
ありがとう。
ユーザー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
)
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);
私が理解しているように、それはおそらく何年にもわたって変わった、今では'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
はこの正確なパラメータをチェックするために直接dbに行きます、それでこれは最速でリソースに関する方法であるべきです。