如何获取当前用户的角色名称?(WordPress)

时间:2016-09-19 作者:booster

我目前有以下代码段:

$user = new WP_User(get_current_user_id()); 
echo $user->roles[1];
并输出bbPress论坛角色的slug。(角色[0]将是通用WP角色,但我不需要它。)

我需要的是这个角色name, 不是鼻涕虫。因此,预期的输出应该是“Keymaster”、“Participant”、“consident”等。

那么,如何获取当前用户的角色名称呢?

5 个回复
SO网友:cjbj

我不确定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 应该保留您要查找的显示名称(但我没有检查此代码)。

SO网友:Marten Timan

此代码段的thnx!我正在运行Buddypress安装(和自定义主题),在这里可以向一个用户添加多个角色。我对您的代码进行了一些调整,以使其正常工作:

<?php
//Get role name by user ID
if( !function_exists(\'get_user_role_name\') ){
    function get_user_role_name($user_ID){
    global $wp_roles;

        $user_data = get_userdata($user_ID);
        $user_role_slug = $user_data->roles;

        foreach($user_role_slug as $user_role){
            //count user role nrs
            $user_role_nr++;
            //add comma separation of there is more then one role 
            if($user_role_nr > 1) { $user_role_list .= ", "; }
            //add role name 
            $user_role_list .= translate_user_role($wp_roles->roles[$user_role][\'name\']);
        }

    //return user role list
    return $user_role_list;

    }
}
?>

SO网友:Daniel Gross

也许他们已经解决了这个问题。但是,现在我刚刚写了这篇文章,我决定分享它。

<?php
//Get role name by user ID
if( !function_exists(\'get_user_role_name\') ){
    function get_user_role_name($user_ID){
        global $wp_roles;

        $user_data = get_userdata($user_ID);
        $user_role_slug = $user_data->roles[0];
        return translate_user_role($wp_roles->roles[$user_role_slug][\'name\']);
    }
}
?>

<?php echo get_user_role_name(User ID here);?>

SO网友:Razon Komar Pal

您可以通过以下函数获取当前用户角色名称(可翻译名称,但不是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 ;
}
现在,通过以下代码获取当前用户角色slug名称:

$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 ); 函数获取当前用户角色名称(可翻译名称,但不是slug)。

注意:用户必须登录才能查看角色名称。

SO网友:Jaber Molla

这是获得它的方法

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 );