Hemos estado viendo cómo crear un sistema de CRM simple 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 veremos cómo restringir el acceso solo al tipo de publicación personalizada de contactos usando capacidades personalizadas.
Si bien anteriormente hemos reducido el nivel de acceso que tienen nuestros usuarios de WordPress, al asignarles un rol de editor o autor, los usuarios aún pueden administrar publicaciones y comentarios. Ninguna de estas funciones es útil para nosotros, por lo que necesitamos restringir aún más el acceso, permitiendo que los Usuarios asignados solo tengan acceso al Tipo de mensaje personalizado de Contactos.
Podemos hacer esto por:
El registro de capacidades personalizadas nos permite definir posteriormente qué roles de WordPress tienen acceso a estas capacidades, por ejemplo, si un autor puede crear un nuevo contacto..
Vamos a editar nuestro archivo de plugins register_post_type ()
función llamada, reemplazando capacity_type => 'post'
con lo siguiente:
'abilities '=> array (' edit_others_posts '=>' edit_others_contacts ',' delete_others_posts '=>' delete_others_contacts ',' delete_private_posts '=' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ',' edit_published_posts '=>' edit_published_contacts ',' publish_posts '=>' publish_contacts ',' delete_published_posts '=>' delete_published_contacts ',' edit_posts '=' edit_contacts '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' => 'edit_contact', 'read_post' => 'read_contact', 'delete_post' => 'delete_contact',), 'map_meta_cap' => true,
Nuestro register_post_type ()
La función ahora debería verse como:
/ ** * Registra un tipo de publicación personalizado llamado contact * / function register_custom_post_type () register_post_type ('contact', array ('labels' => array ('name' => _x ('Contacts', 'Post tipo general name' , 'tuts-crm'), 'singular_name' => _x ('Contact', 'post type singular name', 'tuts-crm'), 'menu_name' => _x ('Contacts', 'admin menu', ' tuts-crm '),' name_admin_bar '=> _x (' Contacto ',' agregar nuevo en la barra de administración ',' tuts-crm '),' add_new '=> _x (' Agregar nuevo ',' contacto ',' tuts -crm '),' add_new_item '=> __ (' Add New Contact ',' tuts-crm '),' new_item '=> __ (' New Contact ',' tuts-crm '),' edit_item '=> __ ('Editar contacto', 'tuts-crm'), 'view_item' => __ ('Ver contacto', 'tuts-crm'), 'all_items' => __ ('Todos los contactos', 'tuts-crm') , 'search_items' => __ ('Search Contacts', 'tuts-crm'), 'parent_item_colon' => __ ('Parent Contacts:', 'tuts-crm'), 'not_found' => __ ('No contact encontrado. ',' tuts-crm '),' not_found_in_trash '=> __ (' No se encontraron contactos en la Papelera. ',' tuts-crm '),), // Frontend' has_archive '=> false, 'public' => false, 'publicly_queryable' => false, // Admin 'capacity' => array ('edit_others_posts' => 'edit_others_contacts', 'delete_others_posts' => 'delete_others_contacts', 'delete_private_posts' => ' delete_private_contacts', 'edit_private_posts' => 'edit_private_contacts', 'read_private_posts' => 'read_private_contacts', 'edit_published_posts' => 'edit_published_contacts', 'publish_posts' => 'publish_contacts', 'delete_published_posts' => 'delete_published_contacts', 'edit_posts '=>' edit_contacts ',' delete_posts '=>' delete_contacts ',' edit_post '=>' edit_contact ',' read_post '=>' read_contact ',' delete_post '=>' delete_contact ',), map_meta_cap' => true, 'menu_icon' => 'dashicons-businessman', 'menu_position' => 10, 'query_var' => true, 'show_in_menu' => true, 'show_ui' => true, 'support' => array ('title ',' autor ',' comentarios ',),));
Aquí, suceden dos cosas:
capacidades
argumento, mapearlos a sus equivalentes de correos. Esto garantiza que WordPress entiende exactamente lo que significan las capacidades (es decir,. editar contacto
se comporta de la misma manera que la editar post
capacidad, excepto que es para nuestros Contactos tipo de publicación personalizada).map_meta_cap
, por lo que se hacen cumplir.Recargue la Administración de WordPress como cualquier usuario, y verá que nuestro Tipo de publicación personalizada de contactos ha desaparecido del Menú de administración de WordPress:
Esto sucedió porque ahora tenemos que decirle a WordPress qué roles tienen nuestras nuevas capacidades de contactos (editar contacto
, editar_contactos
, etc).
Utilizando add_role ()
, podemos crear un nuevo rol de usuario de WordPress y asignarle nuestras capacidades de contactos. El rol se almacena en los datos de Opciones de WordPress, por lo que solo necesitamos hacer esta llamada de función una vez.
Para hacer esto, agregue la siguiente función debajo del final de la __construir()
Funciona en nuestro plugin:
/ ** * Enganche de activación para registrar una nueva función y asignarle nuestras capacidades de contacto * / function plugin_activation () // Defina nuestras capacidades personalizadas $ customCaps = array ('edit_others_contacts' => true, 'delete_others_contacts' => true, ' delete_private_contacts '=> true,' edit_private_contacts '=> true,' read_private_contacts '=> true,' edit_published_contacts '=> true,' publish_cont hoteles '=> true,' edit_contact '=> true,' read_contact '=> true,' delete_contact '=> true,' read '=> true,); // Cree nuestro rol de CRM y asígnele las capacidades personalizadas add_role ('crm', __ ('CRM', 'tuts-crm'), $ customCaps);
Esta función agregará 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 mensaje personalizado de Contactos..
Note que también asignamos el leer
Capacidad para este rol. Esto es necesario para permitir a los usuarios editar su perfil (nombre, contraseña, etc.). Necesitamos permitir que los Usuarios hagan esto, porque cuando inician sesión, WordPress los redirigirá automáticamente a la pantalla de Perfil.
Si no asignamos la leer
capacidad, esto es lo que sucedería cuando el Usuario inicia sesión:
Para ejecutar nuestro plugin_activation ()
una vez, agregue el siguiente código al final de nuestro archivo de complemento:
register_activation_hook (__FILE__, array (& $ wpTutsCRM, 'plugin_activation'));
Esto le dice a WordPress que, al activar el complemento, debe llamar al plugin_activation ()
funciona dentro de nuestro WPTutsCRM
clase.
A continuación, desactive y vuelva a activar su complemento, y luego navegue hasta Usuarios> Añadir Nuevo en la interfaz de administración de WordPress.
Si todo ha funcionado correctamente, verá que la nueva función de CRM aparece en la lista desplegable:
Sigamos adelante y creamos un nuevo usuario llamado. crm, e inicie sesión como ese nuevo usuario. Ahora deberíamos ver nuestra Contactos, con el Tablero y Perfil como las únicas otras opciones de menú:
Si nos desconectamos y volvemos a iniciar sesión como administrador, editor o autor de WordPress, notará que el tipo de publicación personalizada de los contactos aún falta en el menú de administración de WordPress:
Esto se debe a que solo hemos asignado la CRM
Rol de nuestras capacidades de contacto personalizado tipo de contacto. Por lo tanto, todos los demás roles de usuario aún no tienen acceso a este tipo de publicación.
Para solucionar este problema, asignemos las capacidades personalizadas a los roles de administrador y editor agregando el siguiente código al final de la plugin_activation ()
función:
// Agregar capacidades personalizadas a los roles de administrador y editor $ roles = array ('administrador', 'editor'); foreach ($ roles como $ roleName) // Obtener rol $ role = get_role ($ roleName); // Comprobar que existe el rol si (is_null ($ rol)) continuar; // Iterar a través de nuestras capacidades personalizadas, agregándolas // a este rol si están habilitadas para cada persona ($ customCaps como $ capacity => $ habilitado) if ($ habilitado) // Agregar capacidad $ role-> add_cap ($ capacidad);
Aquí, iteramos a través de los roles a los que queremos asignar capacidades personalizadas, comprobando que el rol existe. Si lo hace, entonces iteramos a través de las capacidades personalizadas que definimos anteriormente, agregándolas a la función.
Notará que no hemos agregado 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 el acceso de escritura a las publicaciones de ese usuario..
Sigamos construyendo nuestro plugin_activation ()
función mediante la adición de algunas capacidades para el rol de autor:
// Agregue algunas de nuestras capacidades personalizadas al rol de autor $ role = get_role ('author'); $ role-> add_cap ('edit_contact'); $ role-> add_cap ('edit_contacts'); $ role-> add_cap ('publish_contacts'); $ role-> add_cap ('read_contact'); $ role-> add_cap ('delete_contact'); unset ($ role);
Toda nuestra función ahora debería verse como:
/ ** * Enganche de activación para registrar una nueva función y asignarle nuestras capacidades de contacto * / function plugin_activation () // Defina nuestras capacidades personalizadas $ customCaps = array ('edit_others_contacts' => true, 'delete_others_contacts' => true, ' delete_private_contacts '=> true,' edit_private_contacts '=> true,' read_private_contacts '=> true,' edit_published_contacts '=> true,' publish_cont hoteles '=> true,' edit_contact '=> true,' read_contact '=> true,' delete_contact '=> true,' read '=> true,); // Cree nuestro rol de CRM y asígnele las capacidades personalizadas add_role ('crm', __ ('CRM', 'tuts-crm'), $ customCaps); // Agregar capacidades personalizadas a los roles de administrador y editor $ roles = array ('administrador', 'editor'); foreach ($ roles como $ roleName) // Obtener rol $ role = get_role ($ roleName); // Comprobar que existe el rol si (is_null ($ rol)) continuar; // Iterar a través de nuestras capacidades personalizadas, agregándolas // a este rol si están habilitadas para cada persona ($ customCaps como $ capacity => $ habilitado) if ($ habilitado) // Agregar capacidad $ role-> add_cap ($ capacidad); // Agregue algunas de nuestras capacidades personalizadas al rol de autor $ role = get_role ('author'); $ role-> add_cap ('edit_contact'); $ role-> add_cap ('edit_contacts'); $ role-> add_cap ('publish_contacts'); $ role-> add_cap ('read_contact'); $ role-> add_cap ('delete_contact'); unset ($ role);
Al iniciar sesión como Administrador, Editor o Autor, ahora se mostrará la opción Contactos en el Menú de Administración de WordPress:
Si el administrador de WordPress desactiva nuestro complemento, el CRM
El rol permanecerá en WordPress. Sin embargo, dado que ningún otro complemento o parte de WordPress utiliza este rol, es redundante, por lo que debemos asegurarnos de que CRM
El rol se elimina cuando nuestro complemento está desactivado.
Para hacer esto, agregue la siguiente función debajo de plugin_activation ()
función:
/ ** * Gancho de desactivación para anular el registro de nuestra función de contactos * / function plugin_deactivation () remove_role ('crm');
De la misma manera utilizamos el register_activation_hook ()
Funciona cuando nuestro plugin está activado, podemos usar el register_deactivation_hook ()
Cuando nuestro plugin se desactiva. Agreguemos lo siguiente debajo del registro_activación_hook
llamada:
register_deactivation_hook (__FILE__, array (& $ wpTutsCRM, 'plugin_deactivation'));
Cuando nuestro plugin está desactivado, nuestro CRM
El rol ya no estará disponible.
Hemos creado con éxito un sistema de CRM simple en WordPress, explorando el uso de tipos de publicaciones personalizados, campos de metadatos posteriores y la integración de complementos de terceros para almacenar información sobre nuestros clientes y prospectos.
Este tutorial también ha cubierto algunos de los aspectos más avanzados de WordPress, al mostrar datos de Campos personalizados avanzados a través de las Columnas WP_List_Table. Sistema de CRM.