Как вывести биографию пользователя (не автора или текущего пользователя)
Мне нужно вывести (в php) аватар, биографию (описание) и ссылки на соцсети для конкретного пользователя (на основе полей его профиля). Например, на Странице1 отображать фото, описание (биографию) и соцсети пользователя Уолта Уитмена (ID пользователя 9999), независимо от того, кто создал страницу или кто вошел на сайт.
Аватар я могу вывести так:
<?php echo get_avatar( 'useremail@gmail.cam', 32 ); ?>
Пробовал несколько вариантов, но они не работают. Получаю либо вывод всех метаданных, либо фатальную ошибку (разные ошибки, например 'must be string' и т.д.).
<?php the_user_meta( 'description' ); ?>
Или:
<?php $userdata = get_user_meta( 9999 ); ?><?php echo $userdata['description']; ?>
Если использовать:
<?php
$user = wp_get_current_user( 9999 );
if ( $user->exists() ) // is_user_logged_in() обертка для этой строки
$userdata = get_user_meta( $user->data->ID );
?>
<pre><?php var_dump( $userdata ); ?></pre>
<?php echo $userdata['description'] ; ?>
Получаю фатальную ошибку.

Вы можете использовать:
get_currentuserinfo()
(для которойwp_get_current_user()
является обёрточной функцией) илиget_current_user_id()
, которая используетwp_get_current_user()
чтобы получить ID текущего авторизованного пользователя.
В любом случае, вам нужно убедиться, что пользователь авторизован (ID пользователя не равен 0), прежде чем пытаться получить метаданные пользователя из базы данных.
Как только у вас есть ID пользователя, вы можете использовать get_user_meta()
для получения информации о пользователе из базы данных.
ПРИМЕР:
$user = wp_get_current_user();
if ( $user->exists() ) { // is_user_logged_in() является обёрткой для этой строки
$userdata = get_user_meta( $user->data->ID );
?><pre><?php var_dump( $userdata ); ?></pre><?php
}
РЕДАКТИРОВАНИЕ
Это очень базовый PHP. Вот что возвращает:
$userdata = get_user_meta( 1 );
?><pre><?php var_dump( $userdata ); ?></pre><?php
Результат var_dump()
:
array(29) {
["first_name"]=>
array(1) {
[0]=>
string(6) "Pieter"
}
["last_name"]=>
array(1) {
[0]=>
string(6) "Goosen"
}
["nickname"]=>
array(1) {
[0]=>
string(12) "pietergoosen"
}
["description"]=>
array(1) {
[0]=>
string(349) "My naam is Pieter Goosen BLAH BLAH BLAH"
}
["rich_editing"]=>
array(1) {
[0]=>
string(4) "true"
}
["comment_shortcuts"]=>
array(1) {
[0]=>
string(5) "false"
}
["admin_color"]=>
array(1) {
[0]=>
string(5) "fresh"
}
["use_ssl"]=>
array(1) {
[0]=>
string(1) "0"
}
["show_admin_bar_front"]=>
array(1) {
[0]=>
string(5) "false"
}
["wp_capabilities"]=>
array(1) {
[0]=>
string(31) "a:1:{s:13:"administrator";b:1;}"
}
["wp_user_level"]=>
array(1) {
[0]=>
string(2) "10"
}
["dismissed_wp_pointers"]=>
array(1) {
[0]=>
string(143) "wp330_toolbar,wp330_saving_widgets,wp340_choose_image_from_library,wp340_customize_current_theme_link,wp350_media,wp360_revisions,wp390_widgets"
}
["show_welcome_panel"]=>
array(1) {
[0]=>
string(1) "0"
}
["wp_user-settings"]=>
array(1) {
[0]=>
string(120) "libraryContent=browse&imgsize=full&align=right&editor=html&hidetb=1&mfold=o&unfold=1&urlbutton=post&posts_list_mode=list"
}
["wp_user-settings-time"]=>
array(1) {
[0]=>
string(10) "1447257892"
}
["wp_dashboard_quick_press_last_post_id"]=>
array(1) {
[0]=>
string(3) "463"
}
["twitter"]=>
array(1) {
[0]=>
string(0) ""
}
["facebook"]=>
array(1) {
[0]=>
string(15) "pietergoosencom"
}
["managenav-menuscolumnshidden"]=>
array(1) {
[0]=>
string(89) "a:4:{i:0;s:11:"link-target";i:1;s:11:"css-classes";i:2;s:3:"xfn";i:3;s:11:"description";}"
}
["metaboxhidden_nav-menus"]=>
array(1) {
[0]=>
string(102) "a:4:{i:0;s:8:"add-post";i:1;s:14:"add-informasie";i:2;s:12:"add-post_tag";i:3;s:15:"add-post_format";}"
}
["nav_menu_recently_edited"]=>
array(1) {
[0]=>
string(3) "130"
}
["closedpostboxes_page"]=>
array(1) {
[0]=>
string(6) "a:0:{}"
}
["metaboxhidden_page"]=>
array(1) {
[0]=>
string(94) "a:4:{i:0;s:10:"postcustom";i:1;s:16:"commentstatusdiv";i:2;s:7:"slugdiv";i:3;s:9:"authordiv";}"
}
["closedpostboxes_post"]=>
array(1) {
[0]=>
string(6) "a:0:{}"
}
["metaboxhidden_post"]=>
array(1) {
[0]=>
string(6) "a:0:{}"
}
["closedpostboxes_positions"]=>
array(1) {
[0]=>
string(6) "a:0:{}"
}
["metaboxhidden_positions"]=>
array(1) {
[0]=>
string(6) "a:0:{}"
}
["rtladminbar"]=>
array(1) {
[0]=>
string(3) "ltr"
}
["session_tokens"]=>
array(1) {
[0]=>
string(285) "a:1:{s:64:"fa12574e7a42af2a8944d764c21bda64a5a5ee4572b1fbceb027d8b4af5afcd3";a:4:{s:10:"expiration";i:1448467488;s:2:"ip";s:3:"::1";s:2:"ua";s:108:"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36";s:5:"login";i:1447257888;}}"
}
}
Таким образом, если вам нужно отобразить описание, вы можете сделать:
echo $userdata['description'][0];
Чтобы понять, как обращаться к значениям в массиве, вам действительно нужно изучить основы работы с массивами и способы обращения к их элементам.
РЕДАКТИРОВАНИЕ
Ниже приведён конкретный пример использования:
$walt_id = 1; // Убедитесь, что здесь указан правильный ID
$userdata = get_user_meta( $walt_id );
echo $userdata['description'][0];
Если это не работает, у вас есть серьёзная проблема, которую необходимо отладить, как я указал в комментариях.

Спасибо за код по current_user. На самом деле, у меня тоже есть эта информация из codex. Я пытаюсь отобразить информацию указанного пользователя. Например, на Странице1 показать изображение, описание (био) и ссылки на соцсети пользователя Уолта Уитмена, независимо от того, кто написал страницу или кто вошел в систему и читает страницу.

@JustinMunce Тогда просто передайте ID пользователя Уолта Уитмена в get_user_meta()
. Я не понимаю, в чем ваша проблема.

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

Но я не пытаюсь отображать информацию вошедшего пользователя. Я пытаюсь вывести информацию конкретного пользователя сайта — "Биография Уолта Уитмена".

var_dump
выведет всю информацию об Уолте, так что остается только использовать нужное свойство для отображения требуемых данных.

Я вижу часть этого. Я могу использовать: <?php $userdata = get_user_meta( '9999' ); ?><pre><?php var_dump( $userdata ); ?></pre><?php get_user_meta(); ?> чтобы отобразить полную мета-информацию, но как сделать так, чтобы отображалось только описание?

Привет, Pieter, спасибо за это, я дошел до этого момента, но не могу вывести только описание. Если я попробую <?php $userdata = get_user_meta( 9999 ); ?><?php echo $userdata['description']; ?>, я получаю полный вывод всей мета-информации. Если я использую <?php $user = wp_get_current_user( 9999 ); if ( $user->exists() ) // is_user_logged_in() является оберткой для этой строки $userdata = get_user_meta( $user->data->ID ); ?><pre><?php var_dump( $userdata ); ?></pre><?php echo $userdata['description'] ; ?>, я снова получаю полный вывод всей мета-информации. Не уверен, где ошибка в моем коде.

Да, я пробовал без var_dump. Я перепробовал около 30 различных комбинаций кода, которые теоретически могли бы сработать. В результате я получаю либо полный вывод всех метаданных, либо различные фатальные ошибки (должна быть строка и т.д.).

Питер, я очень ценю весь код, но я потратил еще час, пытаясь заставить это работать и изучая задействованные функции, и все, что я могу сделать — это отобразить биографию автора страницы или текущего пользователя, а не биографию человека, которого я хочу показать. Если возможно, не могли бы вы показать пример рабочего кода, который я мог бы адаптировать?

Пожалуйста, разберись с фактами сейчас же, ты меня запутываешь. Я полностью протестировал свой код сегодня утром, он работает, я могу тебе это сказать. Отключи все плагины и переключись на стандартную тему. У тебя где-то баг в плагине или в твоей теме

Да, я уверен, что твой код работает. Я просто не знаю, что разместить на странице. Ты предоставил несколько вариантов, но я надеялся на что-то, что можно скопировать, вставить, увидеть работоспособность и при необходимости адаптировать

Отчасти, но фрагменты кода разрознены. Я не знаю, как собрать их вместе, чтобы отображалась биография.

Смотрите моё окончательное обновление. Если это не сработает, у вас есть баг или фильтр в теме или плагине, который вызывает проблемы.

Вы можете использовать функцию get_user_by
, чтобы получить ID пользователя по его email-адресу, так как похоже, что это данные, которые у вас есть. Затем вы можете использовать get_userdata
или get_user_meta
с этим ID пользователя, чтобы получить все остальные мета-поля.
Например:
$user = get_user_by( 'email', 'useremail@gmail.com' );
$userdata = get_userdata( $user->ID );
$first_name = $userdata-> first_name;

Хорошо, но как я могу использовать эти команды для отображения конкретного (bio) мета-поля для заданного ID пользователя?

get_usermeta
возвращает множество информации о пользователе, включая description
. Так, в примере выше мы бы обратились к $userdata->description
, чтобы получить поле биографии.
Чтобы изначально вызвать функцию userdata, просто пропустите мою первую строку и передайте ID в функцию get_userdata
.

Привет, Майк, я понимаю get_usermeta и могу использовать его для отображения всей информации о пользователе. Что я не могу сделать, так это вызвать пользователя и отобразить его биографию / кнопки соцсетей. Другими словами, я не знаю, как это закодировать.

(Я автор вопроса.)
Два варианта решения. Их можно использовать для отображения любой информации о пользователях, зарегистрированных на вашем сайте. Я покажу, как отобразить одну ИЛИ две (или более) вещи:
1) Способ Pieter Goosen (я отметил его ответ выше как правильный — ещё раз спасибо, Pieter) (Люди, вам нужно зайти в профиль пользователя и узнать его номер. Используйте этот номер вместо 9999.
Одна вещь:
<?php $walt_id = 9999; // Убедитесь, что здесь указан правильный ID
$userdata = get_user_meta( $walt_id );
echo $userdata['description'][0];
?>
Несколько вещей:
<?php $walt_id = 9999; // Убедитесь, что здесь указан правильный ID
$userdata = get_user_meta( $walt_id );
echo $userdata['description'][0];
echo $userdata['first_name'][0];
?>
2) Способ stephencottontail:
Одна вещь:
<?php the_author_meta( 'user_description', 9999 ); ?> </br>
Несколько вещей:
<?php the_author_meta( 'user_description', 9999 ); ?> </br>
<?php the_author_meta( 'first_name', 9999 ); ?>
