Redirigir a los usuarios a páginas personalizadas por rol

WordPress se está utilizando cada vez más como marco de aplicaciones web. Con ese caso de uso viene un montón de circunstancias adicionales que WordPress no cubre. ¿De verdad quieres que los usuarios de tu aplicación vean el administrador de WordPress??

En mi experiencia de desarrollo de aplicaciones web, la respuesta a esa pregunta suele ser "no".

Hoy te enseñaré cómo redirigir a un usuario según su función a una página personalizada en WordPress.


Cómo configurar

Comencemos esto construyendo un plugin. Deseas esto en un complemento porque es probable que cambies el diseño de tu tema y aún así quieras la funcionalidad de redireccionamiento. Cualquier funcionalidad que desee vivir más allá del diseño del tema actual debe estar en un complemento.

Crea una nueva carpeta de plugins en tu wp-content / plugins directorio llamado 'cm-redireccionar por rol'y agregar un archivo llamado cm-redirect-by-role.php. A ese archivo vamos a agregar el encabezado básico del complemento de WordPress que se ve a continuación.

Ahora que tiene un complemento iniciado, veamos cómo funciona el inicio de sesión de usuario.


Flujo de inicio de sesión de usuario

El lugar predeterminado en el que un usuario puede iniciar sesión en su sitio de WordPress es a través de http://yoursite.com/wp-login.php. Cuando inicia sesión en un sitio desde esa ubicación, el sitio lo envía al panel de administración de WordPress.

Eso significa que el administrador de WordPress se está iniciando y necesitas usar una acción de administrador para atrapar al usuario. Siempre engancho el admin_init Acción, ya que se ejecuta lo suficientemente tarde como para que tenga acceso a los datos del usuario, pero no tan tarde como para que el usuario vea algo en el panel..

Utilizando la admin_init acción significa que incluso si ya han iniciado sesión e intentan acceder al administrador de WordPress, seguirán siendo redirigidos.

Ahora echemos un vistazo al código que vamos a utilizar. Para nuestro ejemplo, asumiremos que queremos redirigir a todos los suscriptores, pero esto funcionará con cualquier rol estándar o personalizado en WordPress.

/ ** * Redirige a los usuarios según su rol * * @since 1.0 * @author SFNdesign, Curtis McHale * * @uses wp_get_current_user () Devuelve un objeto WP_User para el usuario actual * @uses wp_redirect () Redirige al usuario a la URL especificada * / function cm_redirect_users_by_role () $ current_user = wp_get_current_user (); $ role_name = $ current_user-> roles [0]; if ('suscriptor' === $ role_name) wp_redirect ('http://yoursite.com/dashboard');  // if // cm_redirect_users_by_role add_action ('admin_init', 'cm_redirect_users_by_role');

Comenzamos este proceso obteniendo nuestro objeto de usuario actual con wp_get_current_user (). De eso obtenemos nuestro nombre de rol y lo asignamos a la $ role_name variable.

Entonces verificamos si $ role_name coincide con el rol que queremos redireccionar. Si lo hace usamos wp_redirect para enviar al usuario a nuestra ubicación de elección.

Si bien esto funcionará, todavía tenemos una pieza más para agregar.


Haciendo AJAX seguro

Al realizar llamadas AJAX en WordPress, siempre debe llamar al archivo de enrutamiento WordPress AJAX que se encuentra dentro del administrador de WordPress. Si dejamos nuestro código como lo es, cualquier llamada AJAX realizada por nuestros roles coincidentes fallará, ya que cumplirá con nuestro condicional y será redirigida.

Para solucionarlo, debemos comprobar si actualmente estamos realizando una llamada AJAX y, de ser así, omitir la verificación de roles..

función cm_redirect_users_by_role () if (! defined ('DOING_AJAX')) $ current_user = wp_get_current_user (); $ role_name = $ current_user-> roles [0]; if ('suscriptor' === $ role_name) wp_redirect ('http://yoursite.com/dashboard');  // if $ role_name // if DOING_AJAX // cm_redirect_users_by_role add_action ('admin_init', 'cm_redirect_users_by_role');

Ahora tenemos nuestra función de redireccionamiento envuelta en un cheque para el DOING_AJAX constante. Si eso está definido, estamos ejecutando una llamada AJAX y queremos omitir el código de redirección.


Conclusión

Eso es todo, ahora podemos redirigir a los usuarios según su función a una ubicación personalizada de nuestra elección. Incluso podríamos redirigir a los usuarios con diferentes roles a diferentes páginas si quisiéramos.

Todo lo que deberíamos hacer es agregar un segundo condicional para que coincida con el segundo rol y establecer la ubicación a la que queríamos redirigir..