WordPress para el desarrollo de aplicaciones web Gestión de usuarios

A lo largo de esta serie, hemos analizado cómo WordPress puede servir como base para el desarrollo de aplicaciones web..

La cuestión es que, hasta este momento, no hemos echado un vistazo a las características de WordPress que realmente contribuyen. a Creación de aplicaciones web. En cambio, hemos dedicado tiempo a observar cómo WordPress sirve como una base en lugar de un marco, y hemos observado cómo WordPress está organizado en comparación con muchos de los marcos modernos disponibles..

Específicamente, hemos analizado el patrón de diseño dirigido por eventos en contraste con el patrón de diseño del controlador de vista de modelo popular (y sus variantes), y cómo se ve esto dentro del contexto de WordPress.

Con eso, hemos trabajado para repensar la arquitectura de la aplicación y cómo su estructura dentro del contexto de WordPress nos ayuda a obtener un mejor modelo conceptual de cómo encajan las cosas en WordPress y cómo aprovechar el sistema de enganche, es decir, las acciones. y filtros, y cómo afectan a varios puntos durante el ciclo de vida de la página de WordPress.

Si bien esto merece un poco más de discusión, debemos echar un vistazo a las instalaciones que ofrece WordPress fuera de la caja para comprender completamente las funciones y las API con las que tenemos que trabajar antes de echar un vistazo a cómo trabajar con ellos.

En el próximo par de artículos, vamos a hacer precisamente eso.


Componentes de aplicaciones web

Cuando piensa en los componentes de una aplicación web, es probable que se le ocurran varias cosas. Es decir, aparte de la arquitectura habitual de la base de datos, el middleware y la capa de presentación, también existen las siguientes características:

  • Gestión de usuarios
  • Permisos
  • Gestion de sesion
  • Funcionalidad de correo electrónico
  • Serialización y recuperación de datos
  • Enrutamiento de URL (a veces denominado reglas de reescritura o reescritura de URL o incluso solo rutas)
  • Almacenamiento en caché
  • Soporte para consultas personalizadas.

Aunque esta lista no es de ninguna manera exhaustiva, llega a las notas altas de lo que implica la creación de una aplicación web estándar (por supuesto, si hay puntos que no se mencionan, no dude en mencionarlos en los comentarios).

Y no, esto no es prescriptivo. A veces, las aplicaciones web no tienen administración de usuarios, a veces los usuarios no tienen roles, tal vez no necesite el almacenamiento en caché, etc..

Pero el punto no es justificar un caso. todos las cosas que necesitas En su lugar, se trata de hacer un caso para las cosas que están disponibles debería Los necesitas.

Entonces, dicho esto, echemos un vistazo a lo que ofrece WordPress en lo que respecta a la administración de usuarios, permisos, funcionalidad de correo electrónico y administración de sesiones..


Gestión de usuarios y permisos

Cualquier persona que haya usado WordPress, incluso si es solo para blogs o administración de contenido básico, está familiarizado con el sistema de usuario básico. Es decir, crea un nombre de usuario, una contraseña y luego completa su perfil todo lo que desea.

Además, los desarrolladores más experimentados están familiarizados con las ideas de roles y capacidades. Incluso me atrevería a decir que aquellos que usan WordPress están familiarizados con el sistema, incluso si en realidad nunca han echado un vistazo al Codex o se han equivocado al escribir cualquier código basado en el usuario..

Pero la idea general es realmente simple: los usuarios representan un perfil individual para una cuenta en WordPress. Su rol está indicado por lo que se les asignó durante la creación de la cuenta..

Estos roles incluyen:

  • Abonado
  • Contribuyente
  • Autor
  • Editor
  • Administrador

Una vez más, la mayoría de los que hemos trabajado con WordPress estamos familiarizados con estos roles, ¿verdad? Pero, ¿cómo encajan las capacidades en la imagen??

En pocas palabras, las capacidades son las que otorgan a los usuarios ciertos permisos en toda la aplicación de WordPress, así como lo que los restringe de ciertas áreas de la aplicación. Esto está relativamente bien documentado en el Codex..


Agregar un nuevo usuario con un rol

Pero aquí está la cuestión: si está creando una aplicación en WordPress, las API disponibles hacen posible bloquear a los usuarios de las áreas personalizadas que ha creado en función de sus funciones y capacidades..

Creando programáticamente un usuario

Primero, digamos que en algún momento mientras trabaja en su aplicación web, desea poder proporcionar al usuario la capacidad de registrarse o registrarse desde un formulario de registro personalizado (a diferencia del método estándar de creación de la cuenta de usuario en el backend como se muestra arriba).

Esto se puede hacer creando una plantilla con un formulario y luego leyendo los datos de la publicación.

De hecho, puede ser tan simple como capturar la dirección de correo electrónico del usuario. Menciono esto porque, aunque los nombres de usuario son agradables y divertidos, los correos electrónicos tienden a ser únicos para un individuo, por lo que facilita la verificación de errores..

Así que los pasos para hacerlo serían:

  • Captura la dirección de correo electrónico del usuario
  • Compruebe si un usuario existe con ese correo electrónico
  • Si no, crea el usuario
  • De lo contrario, no cree al usuario y genere un mensaje de error.

Relativamente sencillo, ¿verdad? Por supuesto, esto implica que puede generar una contraseña para el usuario al crear su cuenta. Por suerte, hay una API para eso.

Así que aquí hay un ejemplo de cómo crear un usuario mediante programación en una dirección de correo electrónico específica (mientras se genera automáticamente una contraseña).

if (null == username_exists ($ email_address)) $ password = wp_generate_password (12, false); $ user_id = wp_create_user ($ email_address, $ password, $ email_address); wp_update_user (array ('ID' => $ user_id, 'nickname' => $ email_address););  else // El nombre de usuario ya existe, así que manéjalo en consecuencia ...

Después de eso, necesitas crear una nueva instancia de WP_User.

$ user = new WP_User ($ user_id);

Esto es lo que nos permitirá establecer roles para el usuario dado.

Establecer el rol y la capacidad de un usuario

Finalmente, es hora de determinar qué función y conjunto de capacidades asignará al usuario.

Por un lado, puede codificar estos valores en función de las opciones que ofrece WordPress. La verdad es que incluso puedes crear roles y capacidades personalizados. Por ahora, eso está fuera del alcance del artículo; Sin embargo, podemos visitarlo en una futura serie..

Entonces, digamos que queremos que todos los usuarios que están registrados actualmente reciban la abonado papel. Puede ver qué conjunto de capacidades se otorgarán en este artículo del Codex.

Establecer un rol es trivial:

$ usuario-> set_role ('contribuidor');

En este punto, ha creado con éxito un nuevo usuario dentro de la aplicación WordPress mediante programación sin tener que usar ninguna de las funciones administrativas predeterminadas.

Simplemente conecte esto a su propia plantilla, valide, desinfecte y verifique los datos entrantes. $ _POST datos, y estarás listo para ir.

El código completo se ve así:

if (null == username_exists ($ email_address)) // Genere la contraseña y cree el usuario $ password = wp_generate_password (12, false); $ user_id = wp_create_user ($ email_address, $ password, $ email_address); // Establecer el apodo wp_update_user (array ('ID' => $ user_id, 'nickname' => $ email_address);); // Establecer el rol $ user = new WP_User ($ user_id); $ usuario-> set_role ('contribuidor');  else // El usuario ya existe // End si / else

No esta mal cierto?

Comprobación de la función y la capacidad de un usuario

Pero crear un usuario y luego guardar su información en la base de datos en solo la mitad, ¿verdad??

Una vez que el usuario inicie sesión y se autentique, es probable que desee restringir el contenido en función de su función. Entonces, esto plantea la pregunta: una vez que un usuario ha iniciado sesión, ¿cómo podemos recuperar el rol de un usuario??

Afortunadamente, la API de WordPress hace esto relativamente fácil:

  • Primero, necesitamos poder obtener la ID del usuario actual
  • Después de eso, podemos tomar el rol del usuario y continuar con la lógica condicional desde allí.

Vamos a necesitar aprovechar el wp_get_current_user () función, y luego tendremos que obtener una instancia de la WP_User objeto utilizando la ID del usuario actual, después de lo cual podemos echar un vistazo a las capacidades del usuario.

Echa un vistazo al siguiente código:

// Obtener una instancia del usuario actual $ user_id = wp_get_current_user () -> ID; $ user = new WP_User ($ user_id);

No esta mal cierto?

Esto hace que sea realmente fácil escribir código condicional como:

// Esto imprimirá las capacidades del usuario print_r ($ user-> wp_capabilities); // Lo que a su vez le permitirá realizar una comprobación como esta: if ('1' === $ usuario-> wp_capabilities ['suscriptor']) // Tenemos un suscriptor

Ahí es Una forma alternativa de hacer esto, sin embargo:

global $ current_user; get_currentuserinfo (); if (0 === $ current_user-> user_level) // Tenemos un suscriptor

Pero esto plantea la pregunta de de dónde vino ese cero? Mira exactamente eso.

Las diferencias entre los dos enfoques dependen de qué tan orientado a objetos desee que sea su código.

Tiendo a ser menos fan de usar global cuando hay un enfoque orientado a objetos disponible (como en el primer ejemplo); sin embargo, el segundo ejemplo también proporciona una solución relativamente simple. Tu elección.

De todos modos, una vez que puedas verificar condicionalmente el rol de la cuenta de un usuario, puedes restringirlo a áreas específicas de la aplicación.


Pero los usuarios necesitan correos electrónicos!

Tiene razón: como mínimo, la necesidad del usuario de recibir correos electrónicos para cuando se hayan creado sus cuentas, y debe poder recibir correos electrónicos cada vez que haya cambiado algo en su cuenta..

De nuevo, WordPress proporciona una API que lo hace realmente fácil, pero puede extenderse más allá de acciones simples, como cuando se cambia la información del perfil de un usuario..

De hecho, dado el hecho de que WordPress tiene un rico sistema de eventos, usted podría potencialmente conectarse a cualquier cantidad de eventos y enviar correos electrónicos cuando cualquier cosa pasa Eso es obviamente excesivo, pero muestra cuán poderosa es realmente la API.

Entonces, en la siguiente sección, vamos a echar un vistazo a la API de correo electrónico de WordPress y cómo se puede usar para enviar mensajes sobre cierta actividad, así como cómo se puede conectar con otras características de la aplicación..