Anexo 1 – Creando un rol de usuario personalizado en WordPress

En éste anexo profundizamos un poco en uno de los aspectos que dejamos en el aire en los anteriores vídeos: el rol de usuario «donante».

El otro pilar de la aplicación: el usuario

Como ya vimos en vídeos anteriores, el pilar principal de nuestra aplicación son los libros. Por ello era necesario crear en nuestra backend un objeto de tipo libro que pudiera ser creado, editado y publicado por los usuarios de la plataforma.

Pero, ¿qué hay de nuestros usuarios? ¿Qué capacidades van a tener?

Tenemos claro que nuestros usuarios registrados van a poder crear libros, ya que es la razón fundamental de nuestra aplicación: que un usuario done sus libros, por tanto, un usuario tiene que poder dar de alta sus libros con los campos que le proponemos para rellenar: nombre, autor del libro, portada, edición, etc. Tendremos que saber qué campos necesitamos para cada libro y darlos de alta en nuestro WordPress tal y como hemos hecho anteriormente con el ISBN y la editorial.

Pero no sólo podrán publicar. ¿Qué ocurre si se han equivocado al crear el libro y tienen que editar algún campo? ¿Qué sucede si nuestro usuario ya no quiere donar el libro y desea darlo de baja de la plataforma?

Todo esto son características que nosotros, como Product Designer, tenemos que decidir.

Además, para evitar el uso indebido de la plataforma, propusimos que cada usuario sólo pudiera recibir el mismo número de libros que dona. Es decir, si yo como usuario dono dos libros, puedo recibir de otros usuarios otros dos libros en compensación, ya que así fomentamos la donación.

Creando un rol personalizado en WordPress

Por defecto, WordPress nos provee de una serie de roles ya creados: autor, editor, contribuidor, administrador, suscriptor. Éstos roles se diferencian en lo que se denominan «capabilities». Que no es otra cosa que los permisos que tienen dentro de la plataforma. Por ejemplo, un suscriptor sólo tiene permisos de lectura, no puede crear posts, ni libros. Por tanto si un usuario se da de alta en nuestra plataforma como suscriptor no podrá crear libros. En el lado opuesto está el administrador, que tiene todos los permisos necesarios: crear, borrar, y además instalar plugins, crear usuarios, etc.

WordPress, como buen framework, nos provee de muchísimas herramientas para dotar de funcionalidad a nuestra aplicación de forma muy sencilla mediante funciones. Y una de ellas nos permite crear un rol personalizado para usuarios:

add_role( string $role, string $display_name, array $capabilities = array() );

Donde, $role es el nombre con el que registramos el nuevo rol, $display_name es el nombre que tendrá visible éste rol en el panel de administración de WordPress y $capabilities es un array, es decir, una lista de capacidades que tendrán los usuarios con el rol que estamos creando. En nuestro caso concreto, nuestro rol donante será así:

function pda_add_donante_role() {
  add_role( 'donante', 'Donante', array (
    'read'	=> true,
    'edit_post'	=>	true,
    'remove_post'	=>	true,
    'delete_published_post'	=> true,
    'publish_posts'	=> true,
    'upload_files'	=> true,
    'edit_published_posts'	=> true
  ) );
}

Como ves hemos creado una función que se encarga de ejecutar esa funcionalidad, pero de momento, y aunque no se debe realizar así, la hemos añadido en el archivo functions.php del theme que hay activo en nuestro backend.

Para evitar que esta función se esté ejecutando todo el rato podemos hacer uso de los «hooks de WordPresss» para indicarle en qué momento queremos que se ejecute.

Usando los Hooks de WordPress

Y es que uno de los elementos más poderosos de WordPress son los hooks. Los hooks son momentos en el ciclo de vida y ejecución de WordPress en los cuales podemos añadir código o filtrar (modificar) código existente tanto en WordPress como en plugins. No te puedes hacer una idea de la versatilidad que nos pueden llegar a ofrecer la existencia de éstos hooks.

Hooks hay muchísimos, pero para este caso concreto vamos a utilizar un hook llamado init, que se invoca cuando si inicia nuestro WordPress. Parece el mejor sitio para que se ejecute la función que acabamos de crear y que se encarga de dar de alta un nuevo rol de usuario, para ello, le indicamos a WordPress lo siguiente:

add_action('init', 'pda_add_donante_role');

En esta línea de código le estamos diciendo a WordPress que cuando se inicie, además de todo lo que tiene que hacer del propio WordPress, del theme activo y de los plugins activos, que ejecute la función que hemos creado anteriormente.

Y ya está todo preparado para que nuestro backend tenga el rol de donante que necesitamos.

Añadiendo atributos al rol

A un rol le podemos añadir atributos especiales que podemos necesitar. En nuestro caso vamos a añadir un atributo «libros donados» que nos permita conocer la cantidad de libros que ha donado y la diferencia con respecto a los libros que ha recibido de la plataforma.

Realizar esto es muy sencillo gracias al plugin que ya tenemos instalado de ACF (Advanced Custom Fields). Basta con dar de alta un nuevo grupo de campos y crear un atributo, en este caso de tipo numérico, y asociarlo al rol de usuario que acabamos de crear: donante.

Y listo, ahora todos nuestros usuarios donantes tendrán disponible ese atributo al cual le podremos asignar valores desde el frontend de nuestra aplicación, y sumarle un punto cuando dé de alta un libro y restárselo cuando pida un libro a cambio en la plataforma.

 

 

Materiales adjuntos a esta lección:

Recursos relacionados:

    Esta lección no tiene recursos relacionados.

Contenidos del curso

(⟵ Ir al inicio del curso)

02 – Instalación y configuración de Frontity

En esta segunda parte veremos cómo instalar y configurar Frontity utilizando el tema que nos provee el framework por defecto. Terminaremos esta parte mostrando los libros que hemos creado anteriormente […]

Suscríbete a la lista de correo para recibir un resumen de las novedades y los contenidos de Product Designer Academy.

Suscribirme

* Nada de SPAM, sólo contenido de alto valor para ayudarte a crear productos digitales.