Как вывести биографию пользователя (не автора или текущего пользователя)

8 нояб. 2015 г., 07:32:18
Просмотры: 18.8K
Голосов: 4

Мне нужно вывести (в 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'] ; ?>

Получаю фатальную ошибку.

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

У вас есть ID пользователя, для которого нужно отобразить эти данные?

Tom J Nowell Tom J Nowell
8 нояб. 2015 г. 07:34:14

Да, у меня есть ID пользователя и email

Justin Munce Justin Munce
8 нояб. 2015 г. 08:44:55

Похоже, в вашем фрагменте кода отсутствует часть HTML-кода

birgire birgire
8 нояб. 2015 г. 13:15:00
Все ответы на вопрос 3
18

Вы можете использовать:

чтобы получить 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];

Если это не работает, у вас есть серьёзная проблема, которую необходимо отладить, как я указал в комментариях.

8 нояб. 2015 г. 13:06:32
Комментарии

@birgire спасибо за правку. Рука оказалась быстрее мозга.

Pieter Goosen Pieter Goosen
8 нояб. 2015 г. 13:29:24

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

Justin Munce Justin Munce
9 нояб. 2015 г. 00:59:59

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

Pieter Goosen Pieter Goosen
9 нояб. 2015 г. 05:53:55

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

Justin Munce Justin Munce
9 нояб. 2015 г. 09:49:14

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

Justin Munce Justin Munce
9 нояб. 2015 г. 10:02:06

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

Pieter Goosen Pieter Goosen
10 нояб. 2015 г. 12:43:19

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

Justin Munce Justin Munce
10 нояб. 2015 г. 21:48:46

Смотрите мое обновление, надеюсь, это поможет

Pieter Goosen Pieter Goosen
11 нояб. 2015 г. 20:16:00

Привет, 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'] ; ?>, я снова получаю полный вывод всей мета-информации. Не уверен, где ошибка в моем коде.

Justin Munce Justin Munce
11 нояб. 2015 г. 23:11:54

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

Justin Munce Justin Munce
12 нояб. 2015 г. 02:56:20

Хорошо, я обновил вопрос

Justin Munce Justin Munce
12 нояб. 2015 г. 06:13:17

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

Justin Munce Justin Munce
12 нояб. 2015 г. 10:49:18

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

Pieter Goosen Pieter Goosen
12 нояб. 2015 г. 11:14:09

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

Justin Munce Justin Munce
12 нояб. 2015 г. 11:20:31

Разве я не сделал именно это?

Pieter Goosen Pieter Goosen
12 нояб. 2015 г. 12:07:26

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

Justin Munce Justin Munce
12 нояб. 2015 г. 12:30:05

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

Pieter Goosen Pieter Goosen
12 нояб. 2015 г. 14:05:14

Спасибо. Это помогло! Теперь я могу выводить данные из метаполей с небольшими адаптациями вашего кода.

Justin Munce Justin Munce
13 нояб. 2015 г. 07:48:07
Показать остальные 13 комментариев
4

Вы можете использовать функцию 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;
9 нояб. 2015 г. 03:37:31
Комментарии

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

Justin Munce Justin Munce
9 нояб. 2015 г. 09:49:57

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

Чтобы изначально вызвать функцию userdata, просто пропустите мою первую строку и передайте ID в функцию get_userdata.

Mike Selander Mike Selander
10 нояб. 2015 г. 06:21:56

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

Justin Munce Justin Munce
10 нояб. 2015 г. 06:50:43

если у вас нет значения поля, но есть URL, например, если slug https://myexample.com/user/joe/ как получить значение slug

Firefog Firefog
1 июл. 2018 г. 13:50:51
0

(Я автор вопроса.)

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

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 ); ?>
13 нояб. 2015 г. 07:54:46