Как отобразить роль пользователя

27 мая 2012 г., 16:57:21
Просмотры: 14.9K
Голосов: 2

Как отобразить роль пользователя на странице автора.

Я создал свою собственную роль (группу) и хочу выводить роль пользователя под постами и в списке авторов.

Я пробовал этот код, но он не работает, так как использует current_user и показывает роль текущего пользователя во всех профилях авторов

<?php 
    // Получаем роли текущего пользователя
    $user_roles = $current_user->roles;
    // Берем первую роль из массива
    $user_role = array_shift($user_roles);

    // Проверяем и выводим роль
    if ($user_role == 'administrator') {
        echo 'Администратор';
    } elseif ($user_role == 'editor') {
        echo 'Редактор';
    } elseif ($user_role == 'author') {
        echo 'Автор';
    } elseif ($user_role == 'contributor') {
        echo 'Контрибьютор';
    } elseif ($user_role == 'subscriber') {
        echo 'Подписчик';
    } else {
        echo '<strong>' . $user_role . '</strong>';
    }
?>

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

0
Все ответы на вопрос 2
0

Я предполагаю, что вы пытаетесь отобразить роль автора записи, а не текущего пользователя, просматривающего страницу автора.

Предполагая, что вы находитесь внутри цикла, выполните следующее:

//получаем ID автора записи
$user_id = get_the_author_meta( 'ID' ); //предполагаем, что мы в The Loop

$user_obj = get_userdata( $user_id );

if( !empty( $user_obj->roles ) ){
    foreach( $user_obj->roles as $role ){
        echo $role;
    }
}

Или, если вы назначаете только одну роль каждому пользователю/автору, то вместо всего блока foreach можно сделать следующее:

echo $user_obj->roles[0];
6 февр. 2013 г. 06:00:05
4

Измените:

$user_roles = $current_user->roles;

на

$user = new WP_User( $user_id );
$user_roles = $user->roles;

и $user_id должен быть фактическим ID пользователя, чью роль вы пытаетесь получить.

Обновление,

Извините, я только что прочитал часть про шаблон автора, так что попробуйте это:

//сначала получите текущего автора, чью страницу вы просматриваете
if(isset($_GET['author_name']))
        $curauth = get_user_by('slug', $author_name);
else
        $curauth = get_userdata(intval($author));
//затем получите объект пользователя с ролями
$user = new WP_User( $$curauth->ID );
$user_roles = $user->roles; 
....
27 мая 2012 г. 17:15:03
Комментарии

Выводится пустой результат. Ни ошибок, ни текста

pixelngrain pixelngrain
27 мая 2012 г. 17:18:36

Попробуйте var_dump($user); чтобы увидеть, что вы получаете

Bainternet Bainternet
27 мая 2012 г. 17:19:50

Получаю такой вывод object(WP_User)#349 (7) { ["data"]=> NULL ["ID"]=> int(0) ["caps"]=> array(0) { } ["cap_key"]=> NULL ["roles"]=> array(0) { } ["allcaps"]=> array(0) { } ["filter"]=> NULL }

Я использую название роли, как видно в моем первом коде, а не какой-либо ID, может ли это быть причиной проблемы?

pixelngrain pixelngrain
27 мая 2012 г. 17:22:27

@pixelngrain я обновил свой ответ

Bainternet Bainternet
27 мая 2012 г. 17:31:33