Отображение роли текущего пользователя в WordPress

28 сент. 2015 г., 13:06:59
Просмотры: 26.2K
Голосов: 2

Есть ли в админ-панели WordPress раздел, который просто показывает, какая роль назначена текущему авторизованному пользователю?

Например, я знаю, что у меня права администратора, потому что я это знаю, но нигде не вижу этому подтверждения.

Также, если я установлю себе роль Редактора, как быстро проверить, что я действительно авторизован как Редактор? (кроме того, чтобы просто "знать").

Было бы очень удобно это знать, особенно когда делаешь 10 вещей одновременно и теряешь счет.

Возможно, было бы неплохо отображать это после "Как дела..." в правом верхнем углу.

РЕДАКТИРОВАНО

Прежде чем кто-то упомянет панель Пользователей. Да, я вижу там столбец Роль (так как я администратор), но тот, кто является просто Автором, не сможет это увидеть, верно?

1
Комментарии

Очень странно, что WordPress не показывает пользователю его роль

Marco Panichi Marco Panichi
2 окт. 2018 г. 09:48:24
Все ответы на вопрос 3
0

Как вы предложили, вот как можно отобразить роли рядом с именем пользователя в административной панели:

function wpse_203917_admin_bar_menu( $wp_admin_bar ) {
    if ( ! $node = $wp_admin_bar->get_node( 'my-account' ) )
        return;

    $roles = wp_get_current_user()->roles;

    $node->title .= sprintf( ' (%s)', implode( ', ', $roles ) );

    $wp_admin_bar->add_node( $node );
}

add_action( 'admin_bar_menu', 'wpse_203917_admin_bar_menu' );
28 сент. 2015 г. 13:17:20
4

Вы проверяете роль текущего пользователя и добавляете значение в админ-бар, как элемент профиля.

Чтобы получить роль текущего пользователя, используйте небольшую функцию ниже:

/**
 * Возвращает переведённую роль текущего пользователя.
 * Если роли нет, возвращает FALSE.
 *
 * @return string Переведённое название текущей роли.
 **/
function fb_get_current_user_role_fixed() {
    global $wp_roles;

    $current_user = wp_get_current_user();
    $roles = $current_user->roles;
    $role = array_shift( $roles );

    return isset( $wp_roles->role_names[ $role ] ) ? translate_user_role( $wp_roles->role_names[ $role ] ) : FALSE;
}

Также пример добавления значения из функции в админ-бар, в моём примере новый элемент к пункту аккаунта в Админ-баре.

add_action( 'admin_bar_menu', 'fb_change_admin_bar_item' );
/**
 * Добавляет элемент в админ-бар, к пункту my-account.
 *
 * @param Array $wp_admin_bar
 */
function fb_change_admin_bar_item( $wp_admin_bar ) {

    $args = array(
        'id'     => 'user_role',
        'title'  => __( 'Роль:' ) . ' ' .     fb_get_current_user_role_fixed(),
        'parent' => 'my-account' 
    );
    $wp_admin_bar->add_node( $args );
}

Смотрите результат на скриншоте, так гораздо проще понять цель примера. Результат добавления роли в админ-бар

В качестве альтернативы — второй пример, который добавляет название роли к имени пользователя, в стандартный заголовок админ-бара.

add_action( 'admin_bar_menu', 'fb_change_admin_bar_item' );
function fb_change_admin_bar_item( $wp_admin_bar ) {

    $node = $wp_admin_bar->get_node( 'my-account' );

    if ( ! $node ) {
        return $wp_admin_bar;
    }

    $node->title .= ' ' . fb_get_current_user_role_fixed();

    $wp_admin_bar->add_node( $node );
}

Также прилагается скриншот результата.

Роль пользователя в заголовке админ-бара

28 сент. 2015 г. 13:34:10
Комментарии

Хорошо. Значит, встроенного решения, о котором ты знаешь, нет?

mikelovelyuk mikelovelyuk
28 сент. 2015 г. 13:35:37

Верно, ядро не показывает роль каждому пользователю.

bueltge bueltge
28 сент. 2015 г. 13:41:31

В какой файл (или файлы) мне нужно всё это поместить?

mikelovelyuk mikelovelyuk
29 сент. 2015 г. 17:01:12

Кастомный плагин — это правильный путь.

bueltge bueltge
29 сент. 2015 г. 22:07:47
0

Я просто использую:

global $current_user; echo array_shift($current_user->roles);

Для отображения текущей роли пользователя.

26 нояб. 2018 г. 11:58:29