Personalizar los datos mostrados en la web es una buena forma de mejorar la experiencia de usuario, ya que a nadie le gusta que le traten de forma impersonal. Si te llamo por tu nombre es inevitable que te sientas más cercano a mí. Y eso es algo muy poderoso cuando se trata de marketing. Al fin y al cabo, el marketing es psicología.
Supongo que por eso me llegan consultas de forma regular preguntándome como mostrar el nombre del cliente en este o aquel lugar de la tienda o de la web. Como obviamente no puedo dar una respuesta detallada a cada persona que me lo pregunta, voy a tratar de extenderme aquí con todos los detalles sobre cómo mostrar el nombre u otros datos del usuario en la tienda o la web.
Tabla de contenidos
Personalizar el contenido con el nombre del cliente
A todos nos gusta que nos llamen por nuestro nombre, ¿verdad ?
Cuando se hace, de pronto uno se siente más cercano al emisor del mensaje y, por tanto, más receptivo y predispuesto. Si has hecho alguna vez campañas de email marketing lo sabrás bien, y es rara la plataforma que no permite personalizar el mensaje con el nombre del receptor.
Pero no sólo se trata de eso: también es importante poner las cosas fáciles a nuestros usuarios. Si tienes cuenta en mi web (por ejemplo, si eres suscriptor de mis plugins) habrás notado que te he llamado por tu nombre en el primer párrafo de este apartado, pero eso no es todo.
Si vas a cualquiera de los formularios de mi web (por ejemplo, el formulario de contacto) verás que tu nombre y dirección de correo electrónico ya están rellenos. Este tipo de detalles, aunque pequeños, siempre se agradecen por parte de los usuarios.
Recuperar y mostrar datos del cliente
Tanto WordPress como WooCommerce tienen, por supuesto, funciones que permiten hacer estas cosas, así que vamos a ver cómo usarlas y aprovecharlas en nuestra tienda o sitio web. Si eres de los que el código les da repelús, no temas: voy a procurar darlo todo ya bien mascado.
Porque vamos a utilizar esas funciones para recuperar el dato que nos interesa, y usaremos un shortcode (que nosotros mismos crearemos) para mostrarlo donde queramos en nuestra web. Te aconsejo, para sentar bases, echar un vistazo a esta otra entrada:
WooCommerce: la clase WC_Customer
WooCommerce tiene una clase específica que nos permite trabajar con el cliente; no sólo recuperar sus datos (incluyendo datos personales, de envío, de facturación, de impuestos, pedidos, etcétera), sino también modificarlos o hacer con ellos mil cosas: la clase WC_Customer.
La clase tiene muchos métodos, pero hay algunos de ellos especialmente interesantes para el tema de esta entrada: las clases get_first_name, get_username, get_display_name, get_email y get_avatar_url, que nos permiten obtener, respectivamente, su nombre de pila, nombre de usuario, nombre a mostrar, dirección de correo electrónico y URL del avatar.
Así, usando los métodos que la clase WC_Customer pone a nuestra disposición y aprovechando la función de WordPress get_current_user_id, que recupera el ID del usuario conectado, es todo coser y cantar.
¿Estás construyendo tu tienda online o eres implementador WordPress?
¿Necesitas plugins de calidad y con soporte para implementar funcionalidades concretas?
Consigue todos los plugins a la venta en la sección de plugins de esta web y todos los que siga añadiendo. Acceso a los 96 plugins (y subiendo) con soporte directo del desarrollador, actualizaciones y uso ilimitado: úsalos en tantas webs como lo necesites.
Por ejemplo, si queremos recuperar el nombre de pila del cliente que está viendo la tienda, sólo tenemos que hacer:
$cliente = new WC_Customer (get_current_user_id()); $nombre = $cliente->get_first_name();
Fácil a más no poder. Igual con cualquiera de los métodos que he mencionado más arriba (get_email, get_username, etcétera). Para mostrarlo donde queramos, podemos simplemente hacernos un shortcode. Por ejemplo, [nombre]:
add_shortcode ('nombre', function () { $cliente = new WC_Customer (get_current_user_id()); return ucwords ($cliente->get_first_name()); });
Y listo. Allá donde pongamos [nombre] nuestros clientes verán su nombre de pila. Los visitantes (usuarios no registrados o no identificados en su cuenta) no verán nada.
En cuanto a dónde poner este código, te remito a otras entradas donde ya lo he explicado:
WordPress: la clase WP_User
Lo cierto es que yo uso habitualmente la clase WC_Customer porque la conozco bien y me pilla muy a la mano, por eso lo he puesto primero. Costumbre, al fin y al cabo el 99% de mi trabajo lo desarrollo con WooCommerce. Además, WooCommerce solicita al cliente datos que WordPress no solicita por defecto, como por ejemplo direcciones.
Pero si tu web no incluye una tienda con WooCommerce no sufras, porque también puedes (¡faltaría más!) recuperar y mostrar donde quieras los datos de usuario. WordPress cuenta para ello con la clase WP_User y la función get_userdata. Esta función devuelve un objeto WP_User al pasarle como parámetro un ID de usuario. Así, con un simple:
$usuario = get_userdata (get_current_user_id());
Tendremos almacenado en $usuario el objeto del usuario conectado, de donde podremos recuperar los datos que queramos (todos, incluyendo roles y capacidades). Pero hay más formas de hacerlo, por ejemplo instanciando directamente la clase:
$usuario = new WP_User (get_current_user_id());
O usando directamente get_user_by, de la que get_userdata es sólo un alias:
$usuario = get_user_by ('id', get_current_user_id());
Pero la forma más sencilla de hacerlo es, seguramente, utilizando wp_get_current_user:
$usuario = wp_get_current_user();
Como ves, formas de obtener los datos no faltan. De cualquiera de las formas, una vez que tenemos el objeto de usuario podemos acceder a cualquiera de sus propiedades y mostrarla donde queramos usando, como antes, un shortcode. Así, podremos mostrar el nombre de usuario usando un shortcode llamado, por ejemplo, [usuario] haciendo:
add_shortcode ('usuario', function () { $usuario = get_userdata (get_current_user_id()); return $usuario->user_nicename; });
Igualmente podríamos mostrar el email usando la propiedad user_email, el nombre público mediante la propiedad display_name o el nombre de pila con user_firstname.
Mostrar el gravatar del usuario
También podemos mostrar, siguiendo el mismo principio, el gravatar, lo cual es también una forma de personalizar la experiencia del usuario.
Para ello podemos usar la función get_avatar_url, que recibe como parámetro el ID o el correo electrónico del usuario, así que podemos obtener la URL de su avatar con:
$url_avatar = get_avatar_url (get_current_user_id());
Así, podemos hacer un shortcode que muestre el avatar del usuario conectado llamado por ejemplo [avatar] y cuyo código sería, más o menos, así:
add_shortcode ('usuario', function () { $url_avatar = get_avatar_url (get_current_user_id()); return sprintf ('', $url_avatar); });
Y si queremos hacerlo realmente bien, podemos hacer:
add_shortcode ('avatar', function () { $url_avatar = get_avatar_url (get_current_user_id()); $usuario = get_userdata (get_current_user_id()); return sprintf ('', $url_avatar, $usuario->display_name); });
E incluso podemos establecer tu tamaño (en píxels, por defecto son 96) así:
add_shortcode ('avatar', function () { $size = 125; $url_avatar = get_avatar_url (get_current_user_id(), array('size' => $size)); $usuario = get_userdata (get_current_user_id()); return sprintf ('', $url_avatar, $usuario->display_name, $size, $size); });
Jacobo dice
Gracias por tus aportaciones Enrique, son muy útiles.
Enrique J. Ros dice
Gracias a ti por tu comentario, Jacobo. Me alegra que mis contenidos te sean de utilidad 🙂
Un saludo
Rony Freites dice
Hola enrique, gracias por el articulo.
Te hago una cosulta:
Quiero agregar información adicional al correo que se envía al administrador al registrarse un nuevo usuario, en concreto el número de teléfono, esos datos se crean en la tabla usermeta, al procesar el formulario de registro, sin problema.
Para ello coloqué estas lineas en el archivo pluggable.php
$user = get_userdata( $user_id );
$tlf = get_user_meta( $user_id, ‘tlf’, true );
// The blogname option is escaped with esc_html() on the way into the database in sanitize_option().
// We want to reverse this for the plain text arena of emails.
$blogname = wp_specialchars_decode( get_option( ‘blogname’ ), ENT_QUOTES );
if ( ‘user’ !== $notify ) {
$switched_locale = switch_to_locale( get_locale() );
/* translators: %s: Site title. */
$message = sprintf( __( ‘New user registration on your site %s:’ ), $blogname ) . «\r\n\r\n»;
/* translators: %s: User login. */
$message .= sprintf( __( ‘Username: %s’ ), $user->user_login ) . «\r\n\r\n»;
/* translators: %s: User email address. */
$message .= sprintf( __( ‘Email: %s’ ), $user->user_email ) . «\r\n»;
$message .= sprintf(__(‘Nombre: %s’), $nombre) . «\r\n»;
$wp_new_user_notification_email_admin = array(
‘to’ => get_option( ‘admin_email’ ),
/* translators: New user registration notification email subject. %s: Site title. */
‘subject’ => __( ‘[%s] New User Registration’ ),
‘message’ => $message,
‘headers’ => »,
);
Pero, el dato del telefono está vacío en el correo que se envía.
Cómo puedo mostrar los datos registrados en la tabla usermeta, intente creando un plugin y el resultado ha sido el mismo.
Agradecido por la ayuda que me puedas facilitar, saludos
Enrique J. Ros dice
Hola
Revisa en qué user_meta estás guardando el teléfono y adapta el código en consecuencia.
Un saludo
Luis Arturo dice
Hola Hermano buen día buen post me ayuda como pongo el nombre de usuario a mano derecha al lado del menu de nuestro sitio web
Ruben dice
Saludos.
Gracias por tu post. Sin embargo, estoy probando crear el shortcode con el plugins «Bucket» y agregar ese shortcode en el menu utilizando el plugins «shortcode in menus» pero el menu me aumenta de ancho y no se muestra nada sobre el nombre de usuario logeado.
Uso el tema Astra y Woocomerce.
Alguna sugerencia o ¿que estoy haciendo mal?. Gracias
Ruben dice
Saludos nuevamente.
Ya lo solucione. No use el plugins «Bucket» y en cambio agregue a función de la clase directamente en functions.php del tema. Y con el plugins «Shortcode in menus» lo agregue en el menu y listo. RESUELTO
Gracias
Richard dice
Muchas gracias por tus aportes Enrique, pero tengo un problema ahorita, estoy creando una pagina multivendor y el formulario de perfil tiene campos personalizados con ACF, lo que quiero es poder mostrar en la ficha del producto los datos del perfil del usuario que haya cargado el producto que se este viendo en ese momento, supongamos que tengo 10 vendedores y todos los productos se muestran en un mismo listado pero cuando me vaya al detalle de un producto pueda ver la ficha del vendedor que publico ese producto. he buscado por todos lados y no consigo ni codigo ni plugin que haga eso… yo lo trate de hacer y lo maximo que he conseguido es que me muestre los datos del usuario conectado pero no del vendedor del producto. muchas gracias por cualquier orientacion que me puedas dar.
Fernando dice
Hola, muchas gracias por el resumen sobre usuarios de wordpress. Quería hacerte una pregunta. Estoy interesado en crear una página dentro de mi wordpress donde se vean los datos del usuario conectado, es decir, sus propios datos, pero no desde la opción de «Usuarios» del menú de administración, sino desde una página diseñada para tal efecto, pudiendo editarlos desde esa página (u otra paralela) y buscar a otros usuarios.
En resumen, necesitaría:
Poder ver los datos del usuario conectado en una página diseñada propia
Poder modificar los datos del usuario desde esa página (u otra de edición)
Poder buscar a otros usuarios mediante un buscador con filtros
Poder ver los datos de otros usuarios a modo únicamente de consulta.
Que plugin o funcionalidades tendría que llevar a cabo?
Si me puedes orientar te lo agradecería mucho.
Muchísimas gracias por la ayuda.
Enrique J. Ros dice
Hola Fernando
Echa un vistazo a Profile Builder Pro, es posible que te sirva para lo que necesitas.
Un saludo
RODOLFO SEALES POSADA dice
HOLA ENRIQUE, como estas? estoy buscando informacion de como puedo crear una pagina personalizada con los datos, PERO NO DEL USUARIO LOGUEADO, sino de los datos de la persona que referencia a otra a visitar el sitio, digamos como especie de un sistema de afiliacion, pero que cuabdo el nuevo invitado aterrice en el enlace de quien lo invita, se vean los datos de la persona que invito, y se los muestre a el recien invitado, por ejemplo, haz llegado a la pagina de JUAN J REOS, que fuistes tu quien lo invito, etc….. etc…. sabes o puedes orientarme sobre algo de esto? algun codigo, etc…ñ agradezco tu ayuda. Feliz dia.
Enrique J. Ros dice
Hola Rodolfo
Eso depende de qué plugin de afiliados uses. Contacta con el soporte de dicho plugin para consultarles si eso es posible. Si el plugin no lo contempla necesitarás desarrollar el código necesario para ello.
Un saludo
Jose Carlos Diaz dice
Enrique buenas tardes, lo primero agradecerte la labor que realizas. Me gustaría mostrar los datos de los usuarios, pero no solo del usuario logueado, si no de todos los usuarios del sistema. ¿Como lo podria implementar?
Gracias.
Mandinga dice
¡Enrique, eres lo máximo! Saludos desde Argentina