Cómo mostrar la biografía de un usuario (que no sea el autor o el usuario conectado)

8 nov 2015, 07:32:18
Vistas: 18.8K
Votos: 4

Me gustaría mostrar (en PHP) el avatar, biografía (descripción) y algunos enlaces a redes sociales de un usuario específico (basado en los campos de su perfil). Por ejemplo, en la Página1, mostrar la imagen, descripción (biografía) y enlaces a redes sociales del usuario Walt Whitman (usuario número 9999), independientemente de quién escribió la página o quién esté conectado leyendo la página.

Puedo mostrar el avatar:

<?php echo get_avatar( 'useremail@gmail.cam', 32 ); ?>

He intentado varias cosas, pero no funcionan. Obtengo o bien una visualización completa de todos los metadatos o un error fatal (diversos errores como 'debe ser string' etc.).

<?php the_user_meta( 'description' ); ?>

o

<?php $userdata = get_user_meta( 9999 ); ?><?php echo $userdata['description']; ?> 

Si uso:

<?php 
$user = wp_get_current_user( 9999 ); 
if ( $user->exists() ) // is_user_logged_in() es un wrapper para esta línea
    $userdata = get_user_meta( $user->data->ID ); 
?>
<pre><?php var_dump( $userdata ); ?></pre>
<?php echo $userdata['description']; ?>

Recibo un error fatal.

3
Comentarios

¿Tienes el ID de usuario de la persona cuyos detalles te gustaría mostrar?

Tom J Nowell Tom J Nowell
8 nov 2015 07:34:14

Sí, tengo el ID de usuario y el correo electrónico

Justin Munce Justin Munce
8 nov 2015 08:44:55

Parece que falta algo de código HTML en tu fragmento

birgire birgire
8 nov 2015 13:15:00
Todas las respuestas a la pregunta 3
18

Puedes hacer uso de:

para obtener el ID del usuario actualmente conectado.

De una forma u otra, necesitas asegurarte de que tienes un usuario conectado (el ID de usuario no es 0) antes de intentar obtener los metadatos del usuario desde la base de datos.

Una vez que tengas el ID de usuario, puedes usar get_user_meta() para obtener la información del usuario desde la base de datos.

EJEMPLO:

$user = wp_get_current_user();
if ( $user->exists() ) { // is_user_logged_in() es un wrapper para esta línea
    $userdata = get_user_meta( $user->data->ID );
    ?><pre><?php var_dump( $userdata ); ?></pre><?php
}

EDITAR

Esto es PHP muy básico. Aquí está lo que devuelve:

$userdata = get_user_meta( 1 );
    ?><pre><?php var_dump( $userdata ); ?></pre><?php

El 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;}}"
  }
}

Entonces, si necesitas mostrar la descripción, puedes hacer:

echo $userdata['description'][0];

Para aprender cómo referenciar valores en un array, realmente necesitas aprender lo más básico sobre cómo funcionan los arrays y cómo referenciarlos.

EDITAR

Lo siguiente es un caso de uso exacto:

$walt_id = 1; // Asegúrate de tener el ID correcto aquí
$userdata = get_user_meta( $walt_id );
echo $userdata['description'][0];

Si esto no funciona, tienes un problema serio en algún lugar que deberías depurar como he mencionado en los comentarios.

8 nov 2015 13:06:32
Comentarios

@birgire gracias por la edición. La mano fue más rápida que el cerebro en ese momento.

Pieter Goosen Pieter Goosen
8 nov 2015 13:29:24

Gracias por el código sobre current_user. De hecho, yo también tengo esa información, del codex. Sin embargo, estoy intentando mostrar la información de un usuario específico. Por ejemplo, en la Página1, mostrar la imagen, descripción (biografía) y enlaces a redes sociales del usuario Walt Whitman, independientemente de quién escribió la página o quién haya iniciado sesión para leerla.

Justin Munce Justin Munce
9 nov 2015 00:59:59

@JustinMunce Entonces simplemente pasa el ID de usuario de Walt Whitman a get_user_meta(). No entiendo cuál es tu problema.

Pieter Goosen Pieter Goosen
9 nov 2015 05:53:55

Hola Pieter, aparentemente no puedo hacer eso. Acabo de pasar otra hora experimentando con códigos _meta y _description y no he podido hacer que la biografía se muestre en la página, desafortunadamente

Justin Munce Justin Munce
9 nov 2015 09:49:14

Pero no estoy intentando mostrar la información del usuario conectado. Estoy tratando de mostrar la información para un usuario específico del sitio "La biografía de Walt Whitman"

Justin Munce Justin Munce
9 nov 2015 10:02:06

El var_dump mostrará toda la información de Walt, así que es solo cuestión de usar la propiedad correcta para mostrar la información necesaria

Pieter Goosen Pieter Goosen
10 nov 2015 12:43:19

Veo esa parte. Puedo usar: <?php $userdata = get_user_meta( '9999' ); ?><pre><?php var_dump( $userdata ); ?></pre><?php get_user_meta(); ?> para mostrar toda la información meta, pero ¿cómo hago para que solo muestre la descripción?

Justin Munce Justin Munce
10 nov 2015 21:48:46

Mira mi actualización, espero que te ayude

Pieter Goosen Pieter Goosen
11 nov 2015 20:16:00

Hola Pieter, gracias por eso, ya había llegado hasta ahí, pero no parece que pueda mostrar solo la descripción. Si intento <?php $userdata = get_user_meta( 9999 ); ?><?php echo $userdata['description']; ?> obtengo la impresión completa de todos los meta. Si uso <?php $user = wp_get_current_user( 9999 ); if ( $user->exists() ) // is_user_logged_in() es un wrapper para esta línea $userdata = get_user_meta( $user->data->ID ); ?><pre><?php var_dump( $userdata ); ?></pre><?php echo $userdata['description'] ; ?> obtengo de nuevo la impresión completa de todos los meta. No estoy seguro dónde está el error en mi código.

Justin Munce Justin Munce
11 nov 2015 23:11:54

Sí, lo he intentado sin el var_dump. He probado alrededor de 30 combinaciones de código que podrían funcionar. Obtengo o una impresión completa de todos los meta o varios errores fatales (debe ser string, etc).

Justin Munce Justin Munce
12 nov 2015 02:56:20

OK, he actualizado la pregunta

Justin Munce Justin Munce
12 nov 2015 06:13:17

Pieter, agradezco mucho todo el código, pero acabo de pasar otra hora intentando que esto funcione e investigando las funciones involucradas y todo lo que puedo hacer es mostrar la biografía de la persona que escribió la página o del usuario conectado, no la biografía de la persona que quiero mostrar. Si es posible, ¿podrías por favor mostrar un ejemplo de código que funcione y yo podría adaptarlo?

Justin Munce Justin Munce
12 nov 2015 10:49:18

Por favor, aclara los hechos ahora, me estás confundiendo. Probé completamente mi código esta mañana, funciona, te lo aseguro. Desactiva todos los plugins y cambia a un tema predeterminado. Tienes un error en algún plugin o en tu tema

Pieter Goosen Pieter Goosen
12 nov 2015 11:14:09

Sí, estoy seguro de que tu código funciona. Simplemente no sé qué poner en la página. Has proporcionado varias opciones, pero esperaba algo que pueda copiar y pegar, ver que funcione y adaptar, si es posible

Justin Munce Justin Munce
12 nov 2015 11:20:31

¿No es eso exactamente lo que he hecho?

Pieter Goosen Pieter Goosen
12 nov 2015 12:07:26

Hasta cierto punto, pero los fragmentos de código están todos separados. No sé cómo unirlos para que muestren la biografía.

Justin Munce Justin Munce
12 nov 2015 12:30:05

Consulta mi actualización final. Si eso no funciona, tienes un error o un filtro en algún lugar de tu tema o en un plugin que te está causando problemas

Pieter Goosen Pieter Goosen
12 nov 2015 14:05:14

Gracias. ¡Eso ayudó! Ahora puedo mostrar elementos del meta con pequeñas adaptaciones de tu código.

Justin Munce Justin Munce
13 nov 2015 07:48:07
Mostrar los 13 comentarios restantes
4

Puedes usar get_user_by para obtener su ID de usuario a partir de la dirección de correo electrónico, ya que parece que ese es el dato que tienes disponible. Luego puedes usar get_userdata o get_user_meta con ese ID de usuario para obtener todos sus demás campos de metadatos.

Por ejemplo:

$user = get_user_by( 'email', 'useremail@gmail.com' );
$userdata = get_userdata( $user->ID );

$first_name = $userdata-> first_name;
9 nov 2015 03:37:31
Comentarios

Ok, pero ¿cómo puedo usar esos comandos para mostrar el campo meta (bio) particular para un ID de usuario dado?

Justin Munce Justin Munce
9 nov 2015 09:49:57

get_usermeta devuelve una gran cantidad de información sobre el usuario incluyendo description. Entonces, en el ejemplo anterior haríamos referencia a $userdata->description para obtener el campo de biografía.

Para llamar a la función userdata desde el principio, simplemente omite mi primera línea y pasa el ID a la función get_userdata.

Mike Selander Mike Selander
10 nov 2015 06:21:56

Hola Mike, entiendo get_usermeta y puedo usarlo para mostrar toda la información de un usuario. Lo que no puedo hacer es llamar al usuario y mostrar la biografía / botones de redes sociales. En otras palabras, no sé cómo codificarlo.

Justin Munce Justin Munce
10 nov 2015 06:50:43

si cuando no tienes el valor del campo pero tienes la URL, por ejemplo si el slug https://myexample.com/user/joe/ cómo obtener el valor del slug

Firefog Firefog
1 jul 2018 13:50:51
0

(Yo soy el OP.)

Dos opciones para resolver esto. Estas pueden usarse para mostrar cualquier información de los usuarios registrados en tu sitio web. Voy a mostrarte cómo mostrar una O dos (es decir, más) cosas:

1) Método de Pieter Goosen (Marqué su respuesta como correcta arriba -- gracias de nuevo, Pieter) (Gente, necesitan entrar al perfil del usuario y obtener su número de usuario. Usen ese número en lugar de 9999.

Una cosa:

<?php $walt_id = 9999; // Asegúrate de tener el ID correcto aquí
$userdata = get_user_meta( $walt_id );
echo $userdata['description'][0]; 
?>

Más de una cosa:

<?php $walt_id = 9999; // Asegúrate de tener el ID correcto aquí
$userdata = get_user_meta( $walt_id );
echo $userdata['description'][0]; 
echo $userdata['first_name'][0]; 
?>

2) Método de stephencottontail:

Una cosa:

<?php the_author_meta( 'user_description', 9999 ); ?> </br>

Más de una cosa:

<?php the_author_meta( 'user_description', 9999 ); ?> </br>
<?php the_author_meta( 'first_name', 9999 ); ?>
13 nov 2015 07:54:46