X

Mostrar el nombre de usuario en el menú de WordPress

Es posible que quieras mostrar el nombre del usuario que se ha registrado y posteriormente ha iniciado sesión en tu sitio web WordPress. Muchos sitios web utilizan este sistema que garantiza que el usuario está conectado a la web y puede navegar por la administración del sitio.

 

Generalidades

La forma de hacer esto es bastante sencilla. Solo tienes que incluir un código en el archivo functions.php de tu tema activo de WordPress, preferiblemente en un tema hijo (child theme) o en un plugin desarrollado para tal cosa, como puede ser por ejemplo un plugin de Snippets.

Esta solución se puede usar para cualquier tema y no tendrá problemas de compatibilidad con ningún plugin, ya que solo usa las funciones básicas de WordPress.

 

Creando el ítem de menú

En el panel de administración de WordPress dirígete a Apariencia – Menús y elige el menú donde quieres poner el nombre de usuario. El nuevo ítem de menú tendrá un marcador de posición que posteriormente será reemplazado (lo puedes ver en la captura de pantalla a continuación). Ejemplo: #profile_name#, #usuario#, #nombre#.

 

Puedes poner por ejemplo el elemento «Enlaces Personalizados» con la url de cerrar sesión. De tal modo el usuario cuando pulse en su nombre aparece la opción de cerrar la conexión con la web.

 

Código para interpretar el marcador del ítem de menú

Más adelante incluye el código en el archivo functions.php del tema hijo o del plugin de Snippets. Este es el código que tenemos que incluir:


add_filter( 'wp_nav_menu_objects', 'my_dynamic_menu_items' );

function my_dynamic_menu_items( $menu_items ) {
	$final_menu = [];
    foreach ( $menu_items as $menu_item ) {
        if ( '#profile_name#' == $menu_item->title ) {
        	 $user=wp_get_current_user();
        	if ( $user->ID ){
        		 $menu_item->title = $user->user_firstname;
        		 $final_menu[] = $menu_item;
            }
        } else {
        	$final_menu[] = $menu_item;
        }
    }
    return $final_menu;
}

En caso de que esté utilizando tu propio marcador de posición, recuerda reemplazar #profile_name# con el nombre personalizado que elijas en el código de arriba.
Tal como te he comentado al inicio, puedes agregar este código en el archivo functions.php de tu child theme o usando algún plugin de snippets.

 
Si quieres mostrar el gravatar del usuario podrías usar get_avatar(), el código anterior quedaría como:


add_filter( 'wp_nav_menu_objects', 'my_dynamic_menu_items' );

function my_dynamic_menu_items( $menu_items ) {
	$final_menu = [];
    foreach ( $menu_items as $menu_item ) {
        if ( '#profile_name#' == $menu_item->title ) {
        	 $user=wp_get_current_user();
        	if ( $user->ID ){
        		 $avatar = get_avatar( $user->ID, 16 );
        		 $menu_item->title = $avatar." ".$user->user_firstname;
        		 $final_menu[] = $menu_item;
            }
        } else {
        	$final_menu[] = $menu_item;
        }
    }
    return $final_menu;
}

 

Resultado final

Como ves es bastante fácil incluir el nombre del usuario que ha iniciado sesión en nuestro menú de WordPress, dando a la persona que está conectado a la web la facilidad de saber que está vinculado. Al final obtendremos algo similar a lo que se muestra en la siguiente imagen:

 
Si prefieres ver en formato vídeo como se realiza todo el proceso. Lo puedes ver a continuación:

 

Autor: – Desarrollador y optimizador de sitios web con WordPress.

 

Categorías: Themes
Etiquetas: mejoras

Ver comentarios (79)

    • Hola, si, efectivamente, el código posteriormente fue depurado, el del este artículo debería funcionarte sin problemas.

      Saludos.

  • Hola buen día.. Muy buen articulo muchas felicidades. Como puedo hacer que aparezca el avatar en el menu?

  • Buenas navidades, he seguido tu tutorial y no me funciona, el codigo escrito arriba no se parece al codigo que pones en el video. el codigo #profile_name# lo he puesto en texto del enlace y en la url he puesto # para que me dejara colocarlo en el menu. Después he colocado tu codigo escrito arriba con code snippets y no me funciona. Lo único que ha echo es que el texto de enlace desaparezca del menu pero no me sale el nombre del usuario. Que hago mal si dices que funciona en todas las plantillas?

    • Hola, el código final es el de este artículo, si que debería funcionarte, asegúrate de que estes conectado con algún usuario, podrías probar con otro theme en caso haya alguna funcionalidad de tu theme que haga conflicto.

  • genial Jhon! es lo que estaba buscando y no habia manera. Sólo una duda, es posible añadir un condición para que muestre primero un texto "tu cuenta" y despues de hacer login cambie por el "nombre" y al salir vuelva a mostrar "tu cuenta"? Saludos!

    • bien, la idea es para Woocommerce, substituir el "Mi Cuenta" por el nombre del usuario una vez se ha hecho login/registro.

    • Hola, la idea sería que amplíes con un else el código de comprobación del ID, (o lo que es lo mismo comprobación si el usuario esta conectado)

      if ( $user->ID ){
      	// codigo si el usuario esta conectado
      } else {
      	// codigo si el usuario no esta conectado
      }
      

      Evaluaré hacer esto para WooCommerce con el ítem de menú de mi cuenta, ya que con este código de este artículo tendrías que usar un ítem de menú personalizado.

      Saludos.

  • Gracias por el aportem una consulta como puedo agregar la palabara "Hola" antes el nombre, es posible poner en cualquier otro lugar de la web?]

    • Hola, puedes modificar la siguiente línea de código

      $menu_item->title = $avatar." Hola ".$user->user_firstname;

      Saludos.

    • Hola, el código que deberías probar es el del artículo, ¿qué error te aparece?, usas algún plugin para el menú?. Saludos.