web-dev-qa-db-ja.com

現在のユーザーのロール名を取得する方法(ワードプレス)

私は現在このスニペットを持っています:

$user = new WP_User(get_current_user_id()); 
echo $user->roles[1];

そして出力はbbPressフォーラムの役割のスラッグです。 (roles [0]は一般的なWPロールになりますが、必要はありません。)

私が必要としているのは、スラッグではなく、ロール name です。したがって、予想される出力は、「キーマスター」、「参加者」、「観客」などのようになります。

では、どのようにして現在のユーザーのロール名を取得するのですか?

1
booster

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はあなたが探している表示名を保持するはずです(しかし、私はこのコードをチェックしませんでした)。

2
cjbj

次の関数で現在のユーザロール名(翻訳可能な名前で、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 );関数を使用してください(翻訳可能な名前ですが、スラグではありません)。

注:ロール名を表示するには、ユーザはログインする必要があります。

0
Razon K.

これを取得する方法は次のとおりです。

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 );
0
Jaber Molla