Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. WordPress

Crear un sencillo CRM en WordPress: Uso de capacidades personalizadas

by
Difficulty:IntermediateLength:MediumLanguages:
This post is part of a series called Create a Simple CRM in WordPress.
Create a Simple CRM in WordPress: Restricting / Hiding Menu Items

Spanish (Español) translation by Eva Collados Pascual (you can also view the original English article)

Hemos estado viendo cómo crear un sencillo sistema de CRM en WordPress. En la última parte de esta serie, exploramos cómo usar Roles para restringir el acceso de los usuarios a partes de la interfaz de administración de WordPress.

Hoy vamos a cubrir cómo restringir el acceso a sólo el tipo de entrada personalizada Contactos mediante capacidades personalizadas.

Capacidades personalizadas

Aunque anteriormente redujimos el nivel de acceso que tienen nuestros usuarios de WordPress, asignándoles un rol de editor o autor, los usuarios todavía pueden administrar entradas y comentarios. Ninguna de estas funciones nos resulta útil, por lo que necesitamos restringir aún más el acceso, lo que permitirá a que únicamente los usuarios asignados puedan tener acceso al tipo de entrada personalizada Contactos.

Podemos conseguirlo realizando estos pasos:

  1. registrando capacidades personalizadas en nuestro tipo de entrada personalizada
  2. creando un nuevo rol de usuario de WordPress, y asignando nuestras nuevas capacidades personalizadas únicamente a ese rol
  3. creando / editando usuarios de WordPress, asignándoles el nuevo Rol Contactos

Registrar capacidades personalizadas en nuestro tipo de entrada personalizada

Registrar capacidades personalizadas nos permite definir más adelante qué roles de WordPress tendrán acceso a estas capacidades, por ejemplo, si un autor puede crear un nuevo contacto.

Vamos a editar la llamada a la función register_post_type() del archivo de nuestro plugin, reemplazando capability_type => 'post' por lo siguiente:

Nuestra función register_post_type() ahora debería tener el siguiente aspecto:

Aquí ocurren dos cosas:

  1. Hemos definido nuestras propias capacidades utilizando el argumento capabilities, mapeándolas a sus equivalentes de nuestra entrada personalizada Contactos. Esto garantiza que WordPress entienda con precisión lo que significan las capacidades (es decir, edit_contact se comporta de la misma manera que la capacidad edit_post, excepto que es para nuestro tipo de entrada personalizada Contactos).
  2. Le hemos indicado a WordPress que asigne las capacidades vistas arriba a las capacidades primitivas de WordPress, usando map_meta_cap, para reforzarlas.

Vuelve a cargar la pantalla de administración de WordPress como usuario estándar, y verás que nuestro tipo de entrada personalizada Contactos ha desaparecido del menú de administración de WordPress:

Contacts Custom Post Type missing

Esto sucedió porque ahora necesitamos decirle a WordPress qué Roles tienen nuestras nuevas Capacidades Contactos (edit_contact, edit_contacts, etc.).

Crear un nuevo rol de usuario de WordPress, y asignarle únicamente nuestras nuevas capacidades personalizadas

Usando add_role(), podemos crear un nuevo rol de usuario de WordPress y asignarle nuestras capacidades Contactos. El rol se almacena en los datos de Opciones de WordPress, por lo que solo necesitamos hacer esta llamada a la función una vez.

Para ello, añade en nuestro plugin la siguiente función justo debajo del final de la función __construct():

Esta función añadirá un nuevo rol llamado CRM a WordPress. Los usuarios asignados a este rol solo tendrán acceso a las capacidades de Contactos. Por lo tanto, solo tendrán acceso al tipo de entrada personalizada Contactos.

Observa que también le hemos asignado a este rol la capacidad de lectura (read). Esto es necesario para permitir a los usuarios editar su propio perfil (nombre, contraseña, etc.). Necesitamos permitir que los usuarios hagan esto, porque cuando inicien sesión, WordPress los redirigirá automáticamente a la pantalla Tu perfil.

Si no asignamos la capacidad read, sucedería lo siguiente cuando el usuario inicie sesión:

Error message when read capability is not assigned to a Role

Para ejecutar nuestra función plugin_activation() una vez, añadimos el siguiente código al final del archivo de nuestro plugin:

Esto le indica a WordPress que, al activar el plugin, se debe llamar a la función plugin_activation() dentro de nuestra clase WPTutsCRM.

Creación / Edición de usuarios de WordPress, asignarles el nuevo rol Contactos

A continuación, desactiva y vuelve a activar el plugin y, a continuación, dirígete a Usuarios > Añadir nuevo en el escritorio de WordPress.

Si todo ha funcionado correctamente, verás que el nuevo rol de CRM aparece en la lista desplegable:

Our new WordPress Role

Vamos a seguir adelante creando un nuevo usuario llamado crm, e iniciando sesión usando ese nuevo usuario. Ahora deberíamos ver nuestros Contactos, con el Escritorio y el Tu perfil como las únicas otras opciones de menú:

Asignar capacidades personalizadas a otros roles

Si cerramos sesión y volvemos a iniciarla posteriormente como un usuario con rol de administrador, editor o autor de WordPress, observarás que el tipo de entrada personalizada Contactos sigue sin aparecer en el menú de administración de WordPress:

Esto se debe a que solo hemos asignado el rol CRM, nuestras capacidades del tipo de entrada personalizada Contacto. Por lo tanto, todos los demás roles de usuario siguen sin tener acceso a este tipo de entrada.

Para solucionar este problema, asignemos las capacidades personalizadas a los roles de administrador y editor añadiendo el siguiente código al final de la función plugin_activation():

Aquí, recorremos en iteración los roles a los que queremos asignar capacidades personalizadas, comprobando que existe el rol. Si es así, iteramos a través de las capacidades personalizadas que definimos anteriormente, añadiéndolas al rol.

Habrás observado que no hemos añadido ninguna capacidad personalizada al rol de autor; esto se debe a que no queremos asignar todas las capacidades, ya que el rol de autor tradicionalmente solo permite acceso de escritura a las propias entradas de ese usuario.

Vamos a seguir creando nuestra función plugin_activation() añadiendo algunas capacidades para el rol de autor:

Ahora nuestra función debería tener el siguiente aspecto:

Ahora, al iniciar sesión como administrador, editor o autor se mostrará la opción Contactos en el menú de administración de WordPress:

Limpiar nuestros roles

Si el administrador de WordPress desactiva nuestro plugin, el rol crm permanecerá en WordPress. Sin embargo, dado que ningún otro plugin o parte de WordPress utiliza este rol, es redundante, por lo que necesitamos asegurarnos de que el rol de CRM se elimina cuando nuestro plugin está desactivado.

Para ello, añade la siguiente función bajo la función plugin_activation():

De la misma manera que usamos la función register_activation_hook() cuando nuestro plugin se activa, podemos usar register_deactivation_hook() cuando nuestro plugin se desactiva. Añadamos lo siguiente bajo la llamada register_activation_hook:

Cuando nuestro plugin esté desactivado, nuestro rol CRM ya no estará disponible.

Resumen

Hemos creado con éxito un sencillo sistema CRM en WordPress, explorando el uso de tipos de entradas personalizadas, campos meta personalizados e integración de plugins de terceros para almacenar información sobre nuestros actuales clientes y clientes potenciales.

Este tutorial también ha cubierto algunos de los aspectos más avanzados de WordPress, mostrando datos de Advanced Custom Fields a través de columnas WP_List_Table, filtrando nuestra consulta post para buscar los datos de nuestros campos personalizados avanzados, y administrando el acceso de usuario a través de roles y capacidades para restringir el acceso únicamente a nuestro sistema CRM.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.