• Saltar a la navegación principal
  • Saltar al contenido principal
  • Saltar a la barra lateral principal

DecodeCMS

Tu WordPress a otro Nivel ...

  • Acerca de
  • Contacto
  • Inicio
  • Tutoriales
    • Themes
    • Plugins
    • Core
    • Recursos
  • Cursos
  • Acceder
    • Mis cursos
    • Mi Cuenta
    • Acceder
Inicio / Tutoriales / Themes / ¿Cómo mostrar un menú diferente para usuarios registrados?

¿Cómo mostrar un menú diferente para usuarios registrados?

Mostrar menú diferente para usuarios registrados

[ 10 enero 2018 ] [ Autor: Jhon Marreros Guzmán ][ Themes - Intermedio] [ ]

mejoras seguridad

¿Me ayudas a llegar a más gente?

Twittear Compartir LinkedIn WhatsApp

¿Te gustaría tener un menú exclusivo para usuarios registrados y otro menú para visitantes?, en este artículo aprenderás cómo mostrar un menú diferente para usuarios registrados o para un rol específico, de manera sencilla y sin usar plugins.

 

Resultado Final

Resultado final menús visitante y registrado

 

Generalidades

Primero tienes que tener dos menús creados, desde el backend de WordPress, en Apariencia > Menús, puedes crear ambos menús con sus respectivos ítems.

Menús creados de visitantes y para usuarios registrados

 
Es importante además asignar algún menú por defecto para la ubicación de menú que tiene tu theme, esta asignación de menú la cambiaremos posteriormente por código.

Pantalla de Gestionar ubicaciones menú

 

Como alternativa a tener dos menús, si sólo quieres mostrar/ocultar algunos ítems de menú, puedes evaluar usar un solo menú y restringir los ítems a través de un plugin como Nav Menu Roles

 

Seleccionar menú dinámicamente

De acuerdo a si el usuario es un usuario visitante o si es un usuario registrados, mostraremos uno u otro menú, para esto usaremos el siguiente código:


function dcms_menu_dinamico( $args ) {

	if ( $args['theme_location'] == 'top'){

		if ( is_user_logged_in() ) {
			$args['menu'] = 'menu-registrados';
		} else {
			$args['menu'] = 'menu-visitantes';
		}

	}

	return $args;
}

add_filter( 'wp_nav_menu_args', 'dcms_menu_dinamico' );

En el código anterior:

  • Usamos un hook filtro llamado wp_nav_menu_args y hacemos referencia a la función dcms_menu_dinamico
  • Dentro de la función, usamos el argumento $args que es un array asociativo, podemos usar los valores que se documentan en el siguiente enlace
  • Usamos theme_location para comprobar la ubicación del menú con la que vamos a trabajar, en nuestro ejemplo es ‘top’, para aprender sobre ubicaciones de menús, puedes revisar el siguiente artículo
  • Dentro de la condicional, usamos la función is_user_logged_in() para detectar si un usuario esta o no conectado, y de acuerdo a eso cambiamos el menú
  • La asignación del menú puedes ser a través del ID, nombre del menú, o del slug, en el ejemplo hemos usado el slug.

 

Puedes agregar este código al final del archivo functions.php de tu child-theme, o usar algún plugin de snippets.
En WordPress el “slug” es la versión amigable de la URL de algún texto. Suele estar en minúsculas y contiene solo letras, números y guiones.

 

Menú por un rol específico de usuario

Siguiendo la misma lógica anterior, podemos mostrar un menú para un determinado rol de algún usuario (autor, editor, etc) con el siguiente código:


function dcms_menu_dinamico_autores( $args ) {


	if ( $args['theme_location'] == 'top'){

		if ( is_user_logged_in() ) {

			$user = wp_get_current_user();
			if ( in_array('author', $user->roles) ){
	 			$args['menu'] = 'menu-registrados';
			}
	
		}
	}

	return $args;
}

add_filter( 'wp_nav_menu_args', 'dcms_menu_dinamico_autores' );

En el código anterior:

  • En este código he simplificado la condicional de usuario conectado, sin usar “else”, sólo se comprueba con is_user_logged_in() y se asume que tienes el menú de visitantes asignado por defecto.
  • La única diferencia es que ahora obtenemos el objeto usuario con wp_get_current_user()
  • Con el objeto usuario podemos saber los roles que tiene el usuario y comprobar el rol deseado, en nuestro caso el rol ‘author’

 
¿Aún con dudas?, en el siguiente video se explica los puntos tratados anteriormente.

 

¿Me ayudas a llegar a más gente?

Twittear Compartir LinkedIn WhatsApp

Artículos Relacionados

  • Cómo eliminar todos los productos de WooCommerceCómo eliminar todos los productos de WooCommerce
  • Agrupar los resultados de búsqueda en WordPressAgrupar los resultados de búsqueda en WordPress
  • tipos de complementos de WordPress5 tipos de complementos de WordPress
  • Sincronizar WooCommerce y Google SheetsSincronizar WooCommerce y Google Sheets
Valora este artículo : 1 barra2 barras3 barras4 barras5 barras (5 votos, promedio: 5,00 de 5)
Cargando...

Interacciones con los lectores

Comentarios

  1. Javiel

    12 febrero, 2018

    hola muy interesante el artículo, quisiera saber en que archivo, es decir donde pongo la función. y donde agrego el nuevo menu en caso de la opción de hacer dos menú

    • Jhon Marreros Guzmán

      12 febrero, 2018

      Hola en el video explico en donde agregar el código, te sugiero revises el video. Otra opción es: https://decodecms.com/agregar-codigo-a-tu-sitio-sin-usar-functions-php/

  2. Javiel

    12 febrero, 2018

    Muchas Gracias Jhon su material me ha sido de mucha ayuda. Tengo una duda todo me funciona perfectamente pero si me se la url de una pagina de las que no se puede mostrar a un usuario determinado y la pongo el buscador aunque no este en ese user se muestra. Como puedo tratar esas exepciones es decir si una persona quiere acceder a una pagina a la cual su rol no esta autorizada me redireccione para el login Saludos y gracias de antemano .

    • Jhon Marreros Guzmán

      13 febrero, 2018

      Hola, el menú que se mostrará para usuarios registrados, los ítems deben hacer referencia a elementos que controlen adicionalmente permisos. Por ejemplo tu menú privado debe tener ítems de menú que hagan referencia a entradas privadas.

  3. Javiel

    13 febrero, 2018

    Hola jhon me hace falta hacer este trabajo pero no encuentro la solucion espero me ayudes con algun ejemplo o donde encontrarlo. Saludos y muchas gracias

  4. Gerald Seguel

    30 agosto, 2018

    Buenas tardes, quisiera saber como puedo restringir la vista de productos a usuarios según un atributo de éste, por ejemplo yo le puse un atributo marca y deseo que un suscriptor no pueda ver un determinado valor del atributo marca.
    Quedo atento y mucha gracias.

    • Jhon Marreros Guzmán

      4 septiembre, 2018

      Hola creo que es algo muy personalizado y podría ser que se requiera hacer un plugin específico para tu caso. Si deseas puedes contactarme a través del formulario de contacto: https://decodecms.com/contacto/

  5. sofiskita

    5 septiembre, 2018

    Hola Jhon!

    Primero, muchas gracias por este tutorial. Parece que en mi CMS no termina de funcionar. Como mi tema no había child theme, decidí hacerlo mediante el plugin de snipets que has recomendado en otro artículo. Aun así, no hay manera de que reaccione.

    Puede ser que con las últimas actualizaciones haya algo que no se reconozca del código? Puede que esté haciendo mal algo? (Probablemente sea esto último, pero he llamado todo exactamente igual y no hay manera…)

    Muchas gracias por leerme y un saludo!

    • Jhon Marreros Guzmán

      7 septiembre, 2018

      Hola, para hacer un child theme no es necesario un plugin de snippets tienes que colocar el código en el functions.php del theme hijo, revisa : https://decodecms.com/crear-un-child-theme-en-wordpress-de-manera-correcta/

  6. Juan

    10 octubre, 2019

    Buen material colega Jhon muy explicito, sin embargo no me está funcionando en una web que estoy configurando, necesito un menú para rol colaborador y otro para visitantes, al colocar el código en el archivo functions.php de mi tema hijo no logro el cambio, al descargar el plugin Snippet y colocar el fragmento de código lo activo pero nada me resulta podrás orientarme en este caso amigo? un saludo gracias por tus aportes igual me sirven de orientación.

    • Jhon Marreros Guzmán

      11 octubre, 2019

      Hola, tal vez estas usando un nombre de rol incorrecto, prueba también con otro theme padre directamente, uno de los themes por defecto y verifica. Si sigues con problemas puedes escribirme al formulario de contacto.

  7. Lynn

    22 enero, 2020

    Hola. Tengo en mi wordpress el plugin nav menu roles, ya que he puesto un acceso a un área solo para usuarios registrados con el rol de suscriptor, sin embargo siento que usar un plugin solamente para este propósito es un tanto excesivo, no sé si dicho plugin afecta la velocidad de carga de mi web y si pueda hacerlo más ligero cambiando el plugin por un código en mi código que haga exactamente lo mismo, solo mostrar u ocultar un item de menú según el rol de usuario. ¿Me podrías decir si hay diferencia entre una opción y otra?

    • Jhon Marreros Guzmán

      23 enero, 2020

      Hola, dudo que haya una diferencia significativa en la velocidad de respuesta, salvo el plugin este mal programado. Podrías igual evaluar un plugin de cache adicional en caso notes problemas de lentitud.
      Evaluaré hacer un artículo sobre cómo mostrar/ocultar opciones de menú específicas a través sólo de código.
      Saludos.

  8. Ronald Tingo

    5 febrero, 2020

    Hola..Gracias por tu aporte amigo.

    Tengo un problema, primero te comento que estoy trabajando con astra, y al abrir el archivo functions.php, no me visualiza nada del codigo que te aparece a ti del: register_nav_menus…

    Por logica que al colocar el codigo que nos brindas, no se visualiza ningun cambio.

    Ayuda por favor, te lo agradecere mucho..

    • Jhon Marreros Guzmán

      5 febrero, 2020

      Hola, lo primero sería buscar con que nombre tu tema te registra el menú, busca la función register_nav_menus en otros archivos, puedes abrir una carpeta de tu tema en tu máquina local y usar algún editor como Sublime Texto o Visual Studio Code para abrir una carpeta y buscar el texto en todos los archivos, una vez tengas el nombre cambialo por “primary” en el código y agrégalo en el functions.php de tu tema

      • jonatan

        10 noviembre, 2020

        Hola Jhon, de ante mano te agradezco por este artículo. No entiendo a que te referís con “Primary”. A mi me pasa como a Ronald, ubique la función register_nav_menus en otro archivo llamado “theme-menu.php” pero no logro hacer que funcione colocando el código en el functions.php de mi tema.

        • Jhon Marreros Guzmán

          12 noviembre, 2020

          Hola, Primary es una posición que usualmente usan los themes, pero, en tu caso es posible que tu theme no la llame así, eso por eso que debes buscar en la función register_nav_menus(), debe aparecer como parámetro el nombre de las posiciones de tu theme.

  9. Marc

    27 abril, 2020

    Buenas Jhon, un placer y muy buenos tutoriales! tengo una duda, si quiero hacer para mas de un rol especifico como lo hago? Tengo que hacer el mismo procedimiento para todos, e ir cambiando el rol?
    Te sigo viendo y muchas gracias.

  10. Jhon Marreros Guzmán

    28 abril, 2020

    Hola, si, en el mismo código con un elseif puedes agregar roles adicionales, por ejemplo para un rol2

    if ( in_array('author', $user->roles) ){
    	$args['menu'] = 'menu-registrados';
    } elseif ( in_array('rol2', $user->roles) ){
    	$args['menu'] = 'menu-rol2';
    }

    Saludos.

  11. Maritzel

    9 agosto, 2020

    Hola, ya he agregado el código que nos proporcionaste para que se muestre una página más si el usuario está registrado, pero no aparece (utilizo Divi y el código lo agregué con snippets. ¿Tienes alguna idea de qué pudiera estar pasando? Gracias!!

    • Jhon Marreros Guzmán

      12 agosto, 2020

      Hola, tal vez los nombres de menú no son correctos en Divi o tal vez estas usando el contructor de temas, en este caso es dificil conocer que nombre le asignará al menú.

Para escribir código envolver con: <pre class="language-xxx"><code> </code></pre> ,reemplaza las xxx (php, css, html)

*

* Gravatar habilitado

Barra lateral principal

Presentación

Curso Decodifica WordPress

Únete a DecodeCMS

Recibirás como regalo:

Guia práctica con video:
¿Quieres agregar código a WordPress? Revisa las diferentes opciones que tienes.Ver más

Jooble
Alojamiento Wordpress

Niveles

Básico Intermedio Avanzado

Etiquetas

accesibilidad css dashboard editor error funcionalidad herramientas imagen js librería mejoras optimización seguridad social woocommerce

Populares

Evita que tu sitio sea cargado desde un iframe

Qué son los Shortcodes en WordPress y cómo usarlos

Deshabilitar Gutenberg en WordPress selectivamente

Agregar código a tu sitio sin usar functions.php

© logo decode pie
Política de Privacidad | Política de devoluciones
Copyrigth 2023 Todos los derechos reservados