Блок биографий авторов в WordPress через get_userdata

WordPress гибок и даёт много возможностей для кастомизации. Даже при стандартных темах вы можете изменять PHP-файлы шаблонов, чтобы получить динамические блоки — например, список биографий всех зарегистрированных авторов сайта. В этой статье я объясню, как использовать функции WordPress, чтобы извлечь данные пользователя по его ID или email и показать аватар, описание и другие поля профиля.
Почему get_userdata полезен для списка авторов
Стандартные функции типа the_author() ориентированы на автора текущей записи. Для центральных страниц — главной блога, архива или сайдбара — где нет одного “текущего” автора, они возвращают дефолтный результат. Функция get_userdata возвращает объект WP_User по ID и даёт доступ ко всем полям профиля: display_name, user_email, user_url, description и другим.
Короткая определение: get_userdata — функция WordPress, которая возвращает объект пользователя по его user_id и позволяет безопасно получать поля профиля.
Важно: чтобы использовать get_userdata, вам нужен user_id каждого автора. User ID видно в URL редактирования профиля (user_id=).
Пример: базовый вывод аватара и описания
Ниже — минимальный рабочий пример для вывода аватара пользователя и его описания. Разместите код в шаблоне (sidebar.php или кастомном шаблоне):
' . get_avatar($author_email, 80) . '';
// Получаем объект пользователя по ID
$user_info = get_userdata(4);
// Безопасный вывод описания
if ($user_info && !empty($user_info->user_description)) {
echo esc_html($user_info->user_description) . "\n";
}
?>Как это работает:
- get_avatar получает изображение по email и не зависит от текущей записи.
- get_userdata получает объект пользователя по ID и возвращает множество полей.
- Для безопасного вывода используйте функции экранирования (esc_html, esc_attr, esc_url).
Пример: вывод списка биографий для нескольких авторов
Частая задача — вывести сразу всех или выбранных авторов в сайдбаре. Ниже пример, где IDs авторов берутся из массива. Код можно дополнить выборкой пользователей по роли (author, editor) с помощью get_users.
';
echo get_avatar($user->user_email, 64);
echo '' . esc_html($user->display_name) . '
';
if (!empty($user->user_url)) {
echo '' . esc_html($user->user_url) . '';
}
if (!empty($user->user_description)) {
echo '' . esc_html($user->user_description) . '
';
}
echo 'Совет по стилизации: используйте CSS-классы (.author-card) и flexbox для аккуратного расположения изображений и текста.
Варианты получения списка авторов
- Ручной список ID — простой контроль и стабильность.
- get_users с аргументом ‘role’ => ‘author’ — автоматически выбирает всех авторов.
- get_users с ‘orderby’ => ‘post_count’ — сортировка по количеству публикаций.
- Пользовательская SQL-выборка при очень большой базе (только при необходимости и с кэшированием).
Пример get_users для всех авторов:
array('author', 'editor'),
'orderby' => 'display_name',
'order' => 'ASC'
));
foreach ($authors as $user) {
// вывод как в примере выше
}
?>Безопасность и производительность
- Всегда экранируйте вывод: esc_html для текста, esc_url для ссылок.
- Для большого количества авторов используйте transient API или object cache, чтобы не нагружать базу.
- Ограничьте поля выборки, если используете кастомные запросы.
- Будьте осторожны при выводе user_email — публиковать email в открытом виде не рекомендуется.
Важно: get_userdata делает запрос к базе, поэтому выборка сотен пользователей должна кэшироваться.
Критерии приёмки
- На тестовой странице отображается карточка для каждого указанного автора.
- В карточке показаны аватар, имя, описание и ссылка (если есть).
- Текст корректно экранируется, отсутствуют уязвимости XSS.
- При изменении описания в профиле изменения видны без правок шаблона.
Чек-лист внедрения
- Узнать user_id каждого автора (через Edit User в админке).
- Решить источник списка (ручной массив, get_users, роль).
- Вставить код в шаблон (sidebar.php или виджет).
- Добавить CSS для .author-card и аватаров.
- Проверить экранирование и корректность ссылок.
- Настроить кэширование при >30 авторов.
Когда этот подход не подходит и альтернативы
Когда не подходит:
- Нужна миграция на внешнюю систему авторов (например, каталог авторов в отдельной базе) — лучше использовать REST API.
- Очень большое число авторов без кэширования — нагрузка на БД.
- Требуется сложный фильтр и ранжирование по активности — используйте WP_Query и метаполя.
Альтернативы:
- Плагин для списка авторов (если хотите GUI и готовые стили).
- REST API и отдельный фронтенд (если вы делаете SPA).
Мини-методология внедрения (шаги)
- Соберите user_id и email авторов.
- Напишите и протестируйте вывод для одного автора.
- Расширьте до списка и добавьте стили.
- Включите экранирование и проверку на существование полей.
- Настройте кэш и протестируйте нагрузку.
- Документируйте процесс редактирования биографий для редакторов.
Edge-case галерея и отладка
- Пустое поле user_description — показывайте заглушку “Биография отсутствует”.
- Аватар не найден — get_avatar возвращает дефолтное изображение; можно заменить на локальное.
- Пользователь с удалённым аккаунтом — get_userdata вернёт null, пропустите запись.
- Много HTML в описании — если хотите разрешённый HTML, применяйте wp_kses с белым списком тегов.
Короткий словарь терминов
- get_userdata — возвращает объект WP_User по user_id.
- get_avatar — возвращает HTML аватара по email или ID.
- esc_html / esc_url — функции экранирования для безопасного вывода.
- get_users — функция для выборки пользователей по параметрам.
Советы по локализации и поддержке редакторов
- Инструктируйте авторов, как заполнять поле Биография в профиле.
- Если сайт на нескольких языках, храните локализованные описания в user_meta и выбирайте нужный вариант по текущему языку.
- Для GDPR: не показывайте email без согласия; используйте форму контакта через сайт.
Пример расширения: карточка с соцсетями и ролями
Добавьте в профиль custom fields (например, twitter, linkedin) или используйте существующие поля user_url. В шаблоне проверьте наличие полей и выведите иконки с ссылками. Не забудьте экранировать URL через esc_url.
Итог и рекомендации
Вывод биографий авторов через get_userdata даёт точный контроль над тем, какие данные показывать, и работает независимо от того, с какой страницы вызывается код. Это удобно для сайдбаров, страниц “О команде” и централизованного каталога авторов. Для крупных сайтов добавляйте кэширование и документируйте процесс редактирования профилей для вашей команды.
Короткое объявление для команды: добавьте инструкции по заполнению поля «Биография» в профиле пользователей. После обновления профиля карточки на сайте обновятся автоматически.
Кредит изображения: Henk L
Похожие материалы
RDP: полный гид по настройке и безопасности
Android как клавиатура и трекпад для Windows
Советы и приёмы для работы с PDF
Calibration в Lightroom Classic: как и когда использовать
Отключить Siri Suggestions на iPhone