Условный тег, основанный на роли автора в author.php
Существует ли какой-либо способ отображения различных данных в шаблоне профиля author.php
в зависимости от роли отображаемого профиля? (НЕ того, кто его просматривает, а автора, на которого ссылается этот конкретный профиль).
Если отображается профиль автора с ролью editor
, то будет отображаться некоторое содержимое, а если профиль принадлежит автору с ролью contributor
, то будут отображаться некоторые другие материалы.
Я нигде не нашел ответа на этот вопрос пока. Можно ли это сделать?
2 answers
current_user_can
не дает желаемого результата при работе с ролями. Существует билет trac #22624, объясняющий все это. Он был закрыт следующим
Ключевые слова закрыты удалены
Этап, ожидающий рассмотрения, удален
Разрешение установлено на wontfix
Статус изменен с нового на закрытый
Мое решение состояло бы в том, чтобы получить роль рекомендуемого пользователя и затем проверьте это на соответствие определенным ролям
Первым делом нужно было бы получить роль автора с помощью get_queried_object()->roles
, а затем проверить, находится ли желаемая роль в массиве, и если это так, сделайте что-нибудь. Вот код
$user_role = get_queried_object()->roles[0];
if( in_array( strtolower('Editor'), $user_role ) ) {
//Do something for Editor
}elseif( in_array( strtolower('Contributor'), $user_role ) ) {
//Do something for Contributor
}
РЕДАКТИРОВАТЬ
Роли пользователей начинаются с прописных букв, но роли, возвращаемые из get_queried_object()->roles
, начинаются со строчных букв. Вот почему я использовал роли как таковые в своем коде и использовал strtolower
для преобразования ролей в нижний регистр
Можно ли это сделать?
Конечно.
Внутри author.php
получите идентификатор пользователя, на которого ссылается просмотренный профиль, используя get_queried_object_id()
проверьте возможность и, наконец, условно отобразите контент на основе этого.
Я сказал "проверить возможности", а не "проверить роль", потому что проверять роли - это meh, это намного лучше и рекомендуется проверять возможности. Использовать user_can
для сферы применения.