私は現在このスニペットを持っています:
$user = new WP_User(get_current_user_id());
echo $user->roles[1];
そして出力はbbPressフォーラムの役割のスラッグです。 (roles [0]は一般的なWPロールになりますが、必要はありません。)
私が必要としているのは、スラッグではなく、ロール name です。したがって、予想される出力は、「キーマスター」、「参加者」、「観客」などのようになります。
では、どのようにして現在のユーザーのロール名を取得するのですか?
BbPressがWordPressの規約に従っているかどうかはわかりませんが、WPにはロール情報を保持する $WP-roles
というグローバルクラスがあります。だから、あなたが持っているものから始めて、現在のユーザーの役割があります:
$current_role = $user->roles[1];
次に、すべての役割のリストを取得します。
$all_roles = $wp_roles->roles;
次に、$all_roles
をループ処理して$current_role"
を見つけます。
foreach ($all_roles as $role_key => $role_details) {
if ($role_key == $current_role) $current_role_name = $role_details['name'];
}
さて、$current_role_name
はあなたが探している表示名を保持するはずです(しかし、私はこのコードをチェックしませんでした)。
次の関数で現在のユーザロール名(翻訳可能な名前で、slugではない)を取得できます。現在のユーザロールのslugをパラメータとして渡すだけです。
function wp_get_current_user_translatable_role_name( $current_user_role_slug = '' ) {
$role_name = '';
if ( ! function_exists( 'get_editable_roles' ) ) {
require_once ABSPATH . 'wp-admin/includes/user.php';
}
// Please note that translate_user_role doesn't work in the front-end currently.
load_textdomain( 'default', WP_LANG_DIR . '/admin-' . get_locale() . '.mo' );
$editable_roles = array_reverse( get_editable_roles() );
foreach ( $editable_roles as $role => $details ) {
$name = translate_user_role( $details['name'] );
// preselect specified role
if ( $current_user_role_slug == $role ) {
$role_name = $name;
}
}
echo $role_name ;
}
今、次のコードで現在のユーザーロールスラグ名を取得します。
$user_meta = get_userdata(get_current_user_id());
$current_user_role_slug = $user_meta->roles[0];
現在のユーザロール名を取得するにはwp_get_current_user_translatable_role_name( $current_user_role_slug );
関数を使用してください(翻訳可能な名前ですが、スラグではありません)。
注:ロール名を表示するには、ユーザはログインする必要があります。
これを取得する方法は次のとおりです。
function get_user_role($user_id) {
global $wp_roles;
$roles = array();
$user = new WP_User( $user_id );
if ( !empty( $user->roles ) && is_array( $user->roles ) ) {
foreach ( $user->roles as $role )
$roles[] .= translate_user_role( $role );
}
return implode(', ',$roles);
}
//then call the function with userid param
echo get_user_role( 7 );