Spanish (Español) translation by Eva Collados Pascual (you can also view the original English article)
Si eres un diseñador independiente, un desarrollador o el propietario de un negocio, sabrás lo difícil que es mantener un almacenamiento centralizado de los datos de clientes potenciales. Una vez lo hayas logrado, a veces es difícil mantener esos datos actualizados: registrar las llamadas que has hecho al cliente potencial, los correos electrónicos que has enviado, etc.
Específicamente, exploraremos el registro de un tipo de entrada personalizada, la creación de campos personalizados de entrada, la visualización de campos de entrada personalizados en la interfaz de administración de WordPress, la búsqueda de los datos de nuestros campos personalizados y la conversión de la interfaz de administración de WordPress en una ligera interfaz de CRM.
¿Por qué no usar un plugin de CRM? (¿o un sistema CRM?)
Aunque existen plugins gratuitos y premium de WordPress para crear un CRM (como WP-CRM) y servicios CRM de terceros (como Salesforce o Highrise), son demasiado complejos como para empezar a usarlos rápidamente, o tienen características que puede que no sean las ideales para nuestro flujo de trabajo en particular.
Al crear nuestra propia solución, podemos construir una que sea ligera y sencilla, y que pueda extenderse en el futuro en función de tus necesidades concretas. Además, aprenderemos a usar algunas de las funciones de la API de WordPress.
Crear el plugin CRM
Para esta serie, crearemos un plugin de WordPress y ampliaremos su funcionalidad a lo largo de cada parte de esta serie.
El código fuente se proporcionará en su totalidad al final de cada artículo, pero hasta entonces, vamos a crear el plugin paso a paso.
En primer lugar, en la instalación local de WordPress, crea un directorio en wp-content/plugins llamado tuts-crm. A partir de aquí, comenzaremos a añadir nuestro código fuente.
El encabezado del plugin
Crea un archivo llamado tuts-crm.php, insertando el siguiente código:
1 |
<?php
|
2 |
/**
|
3 |
* Plugin Name: Tuts+ CRM
|
4 |
* Plugin URI: #
|
5 |
* Version: 1.0
|
6 |
* Author: Tuts+
|
7 |
* Author URI: https://code.tutsplus.com
|
8 |
* Description: A simple CRM system for WordPress
|
9 |
* License: GPL2
|
10 |
*/
|
11 |
?>
|
Como verás, se trata de un simple comentario PHP. Sin embargo, WordPress escanea esto para averiguar lo siguiente:
- el nombre del plugin,
- el autor del plugin,
- la descripción de lo que hace el plugin
En el escritorio de WordPress, activa tu nuevo plugin dirigiéndote a Plugins > Plugins instalados, y después haz clic en el botón "Activar" que aparece junto al plugin CRM:
.png)
.png)
.png)
Configuración de la clase de nuestro plugin
En cualquier sitio web WordPress que tenga cualquier cantidad y combinación posible de plugins, cabe la posibilidad de que un nombre de función que escojamos usar (como crm()) entre en conflicto con otro plugin que esté utilizando ese mismo nombre.
La mayoría de los plugins solucionan este problema mediante el uso de una comprobación function_exists():
1 |
if ( ! function_exists( 'crm' ) ) { |
2 |
function crm() { |
3 |
// Do something here
|
4 |
}
|
5 |
}
|
Si bien esto impide que tu sitio WordPress se paralice, no logra que tu plugin funcione en caso de darse un conflicto.
Un enfoque alternativo orientado a objetos consiste en ajustar las funciones en una clase orientada a objetos. Vamos a avanzar adelante y a hacer esto añadiendo lo siguiente a continuación del comentario del encabezado del plugin:
1 |
class WPTutsCRM { |
2 |
|
3 |
/**
|
4 |
* Constructor. Called when plugin is initialised
|
5 |
*/
|
6 |
function __construct() { |
7 |
|
8 |
}
|
9 |
|
10 |
}
|
11 |
|
12 |
$wpTutsCRM = new WPTutsCRM; |
Esto crea nuestra clase PHP, junto con una construcción, que es invocada cuando llegamos a la línea $wpTutsCRM = new WPTutsCRM;
Registrar nuestro tipo de entrada personalizada
A continuación, tenemos que registrar un tipo de entrada personalizada, que almacenará cada contacto en nuestro sistema CRM.
Desde el Codex:
WordPress puede contener y mostrar muchos tipos distintos de contenido. Un elemento único de dicho contenido se denomina generalmente post, aunque post también es un tipo de entrada específico. Internamente, todos los tipos de post se almacenan en el mismo lugar, en la tabla de la base de datos wp_posts, pero se distinguen unos de otros por una columna denominada post_type.
WordPress 3.0 te proporciona la capacidad de añadir tus propios tipos de entradas personalizadas y de usarlas de diferentes maneras.
Las páginas y las entradas son dos tipos habituales de post de WordPress. Podemos ampliar la funcionalidad de WordPress añadiendo nuestro propio tipo de entrada personalizada. Para ello, registremos una acción (action) en el constructor de nuestro plugin:
1 |
function __construct() { |
2 |
add_action( 'init', array( $this, 'register_custom_post_type' ) ); |
3 |
}
|
Esto le dice a WordPress que ejecute la función register_custom_post_type dentro de nuestra clase cuando se inicializa nuestro plugin.
A continuación, añade la función register_custom_post_type:
1 |
/**
|
2 |
* Registers a Custom Post Type called contact
|
3 |
*/
|
4 |
function register_custom_post_type() { |
5 |
register_post_type( 'contact', array( |
6 |
'labels' => array( |
7 |
'name' => _x( 'Contacts', 'post type general name', 'tuts-crm' ), |
8 |
'singular_name' => _x( 'Contact', 'post type singular name', 'tuts-crm' ), |
9 |
'menu_name' => _x( 'Contacts', 'admin menu', 'tuts-crm' ), |
10 |
'name_admin_bar' => _x( 'Contact', 'add new on admin bar', 'tuts-crm' ), |
11 |
'add_new' => _x( 'Add New', 'contact', 'tuts-crm' ), |
12 |
'add_new_item' => __( 'Add New Contact', 'tuts-crm' ), |
13 |
'new_item' => __( 'New Contact', 'tuts-crm' ), |
14 |
'edit_item' => __( 'Edit Contact', 'tuts-crm' ), |
15 |
'view_item' => __( 'View Contact', 'tuts-crm' ), |
16 |
'all_items' => __( 'All Contacts', 'tuts-crm' ), |
17 |
'search_items' => __( 'Search Contacts', 'tuts-crm' ), |
18 |
'parent_item_colon' => __( 'Parent Contacts:', 'tuts-crm' ), |
19 |
'not_found' => __( 'No conttacts found.', 'tuts-crm' ), |
20 |
'not_found_in_trash' => __( 'No contacts found in Trash.', 'tuts-crm' ), |
21 |
),
|
22 |
|
23 |
// Frontend
|
24 |
'has_archive' => false, |
25 |
'public' => false, |
26 |
'publicly_queryable' => false, |
27 |
|
28 |
// Admin
|
29 |
'capability_type' => 'post', |
30 |
'menu_icon' => 'dashicons-businessman', |
31 |
'menu_position' => 10, |
32 |
'query_var' => true, |
33 |
'show_in_menu' => true, |
34 |
'show_ui' => true, |
35 |
'supports' => array( |
36 |
'title', |
37 |
'author', |
38 |
'comments', |
39 |
),
|
40 |
) ); |
41 |
}
|
Esto registra un tipo de entrada personalizada denominada contact. register_post_type acepta la siguiente matriz de argumentos:
| Clave | Descripción |
|---|---|
| labels | Matriz de etiquetas que describen este tipo de entrada. Estos argumentos se utilizan dentro de la Administración de WordPress. |
| has_archive | Habilita los archivos en el front-end del sitio web. |
| public | Si el tipo de entrada debe estar disponible en el área de Administración de WordPress y en el front-end del sitio web. |
| publicly_queryable | Si este tipo de entrada personalizada puede ser consultada desde el front-end del sitio web. |
| capability_type | Se utiliza para definir las capacidades que el usuario debe tener para añadir, editar y eliminar entradas de este tipo de entrada. Esto podría tratarse de una capacidad existente (como post) |
| menu_icon | La dirección URL de la imagen del icono del menú o una clase dashicons- (3.8 o superior). Utilizado en el área de Administración de WordPress. |
| menu_position | Un número que indica dónde mostrar este elemento en el menú de Administración de WordPress. Cuanto menor sea el número más arriba aparecerá en el menú. |
| query_var | Establece el query_var para este tipo de entrada. El valor predeterminado es el nombre del tipo de entrada personalizada. |
| show_in_menu | Si deseas mostrar este tipo de entrada personalizada en el menú de Administración de WordPress. |
| show_ui | Si se va a generar una interfaz de usuario en la Administración de WordPress para permitir añadir, editar y eliminar entradas para este tipo de entrada personalizada. |
| supports | Matriz que detalla los campos disponibles para este tipo de entrada personalizada. Algunos ejemplos son title, editor, excerpt y page-attributes |
Guarda tu plugin y luego observa tu escritorio de WordPress. Deberías ver una nueva entrada de menú llamada Contacts (Contactos):

Haz clic en esta entrada, deberías ver una interfaz familiar y similar a la que utilizas para administrar entradas y páginas:



Continuemos y añadamos nuestro primer contacto. Haz clic en "Añadir nuevo" y luego coloca "Joe Bloggs" en el campo "Título", antes de hacer clic en "Publicar".



Por último, tenemos que comprobar el tipo de entrada personalizada guardada. Haz clic de nuevo en "Contacts" en el menú de administración de WordPress, ahora deberías ver nuestro nuevo contacto:



Qué viene a continuación...
En el siguiente artículo, vamos a añadir campos personalizados a nuestro tipo de entrada personalizada Contact, lo que nos permitirá almacenar más información sobre nuestros actuales clientes y nuestros clientes potenciales.



