Если вы независимый дизайнер, разработчик или владелец бизнеса, вы знаете, как трудно хранить централизованное хранилище данных о потенциальных клиентах. После этого иногда бывает сложно поддерживать эти данные в актуальном состоянии — регистрируя звонки, которые вы сделали потенциальному клиенту, отправленные вами электронные письма и т. Д.
В частности, мы рассмотрим регистрацию настраиваемого типа записи, создание настраиваемых полей публикации, отображение настраиваемых полей публикации в интерфейсе администрирования WordPress, поиск по нашим данным настраиваемых полей и превращение интерфейса администрирования WordPress в облегченный интерфейс CRM.
Почему бы не использовать плагин CRM (или систему CRM?)
Хотя бесплатные и платные плагины WordPress CRM существуют (например, WP-CRM ) и сторонние службы CRM (такие как Salesforce или Highrise), они либо слишком сложны, чтобы начать их использовать быстро, либо имеют функции, которые могут не подходить для наших конкретных рабочий процесс.
Внедряя наше собственное решение, мы можем создать легкое и простое решение, которое в будущем может быть расширено с учетом ваших конкретных требований. Кроме того, мы узнаем, как использовать некоторые функции WordPress API.
Создание плагина CRM
Для этой серии мы создадим плагин для WordPress и расширим его функциональность в каждой части этой серии.
Исходный код будет предоставлен полностью в конце каждой статьи, но до тех пор давайте создадим плагин шаг за шагом.
Во-первых, при локальной установке WordPress создайте каталог в wp-content/plugins
именем tuts-crm
. Отсюда мы начнем добавлять наш исходный код.
Заголовок плагина
Создайте файл с именем tuts-crm.php
, вставив следующий код:
01
02
03
04
05
06
07
08
09
10
11
|
<?php
/**
* Plugin Name: Tuts+ CRM
* Plugin URI: #
* Version: 1.0
* Author: Tuts+
* Author URI: http://code.tutsplus.com
* Description: A simple CRM system for WordPress
* License: GPL2
*/
?>
|
Как вы увидите, это всего лишь комментарий PHP. Тем не менее, WordPress сканирует это, чтобы выяснить:
- название плагина,
- автор плагина,
- описание того, что делает плагин
В панели управления WordPress активируйте новый плагин, перейдя в «Плагины»> «Установленные плагины» и затем нажав «Активировать» рядом с плагином CRM:
Настройка нашего класса плагинов
На любом веб-сайте WordPress, имеющем любое возможное количество и комбинацию плагинов, возможно, что имя функции, которую мы решим использовать (например, crm()
), конфликтует с другим плагином, который использует то же самое.
Большинство плагинов решают эту проблему, используя проверку function_exists()
:
1
2
3
4
5
|
if ( ! function_exists( ‘crm’ ) ) {
function crm() {
// Do something here
}
}
|
Хотя это останавливает ваш сайт WordPress от остановки, он не заставляет ваш плагин работать в случае конфликта.
Альтернативный объектно-ориентированный подход — заключить ваши функции в объектно-ориентированный класс. Давайте сделаем это, добавив следующий комментарий к заголовку плагина:
01
02
03
04
05
06
07
08
09
10
11
12
|
class WPTutsCRM {
/**
* Constructor.
*/
function __construct() {
}
}
$wpTutsCRM = new WPTutsCRM;
|
Это создает наш класс PHP вместе с конструкцией, которая вызывается, когда мы достигаем строки $wpTutsCRM = new WPTutsCRM;
Зарегистрируйте наш пользовательский тип сообщения
Далее нам нужно зарегистрировать пользовательский тип записи, который будет хранить каждый контакт в нашей системе CRM.
Из Кодекса:
WordPress может хранить и отображать много разных типов контента. Отдельный элемент такого контента обычно называется публикацией, хотя публикация также является определенным типом публикации. Внутри все типы записей хранятся в одном и том же месте в таблице базы данных wp_posts, но различаются по столбцу с именем post_type.
WordPress 3.0 дает вам возможность добавлять свои собственные типы записей и использовать их по-разному.
Страницы и сообщения — это два распространенных типа сообщений WordPress. Мы можем расширить функциональность WordPress, добавив наш собственный тип поста. Давайте сделаем это, зарегистрировав action
в конструкторе нашего плагина:
1
2
3
|
function __construct() {
add_action( ‘init’, array( $this, ‘register_custom_post_type’ ) );
}
|
Это говорит WordPress запускать функцию register_custom_post_type
внутри нашего класса при инициализации нашего плагина.
Затем добавьте функцию register_custom_post_type
:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
/**
* Registers a Custom Post Type called contact
*/
function register_custom_post_type() {
register_post_type( ‘contact’, array(
‘labels’ => array(
‘name’ => _x( ‘Contacts’, ‘post type 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( ‘Contact’, ‘add new on admin bar’, ‘tuts-crm’ ),
‘add_new’ => _x( ‘Add New’, ‘contact’, ‘tuts-crm’ ),
‘add_new_item’ => __( ‘Add New Contact’, ‘tuts-crm’ ),
‘new_item’ => __( ‘New Contact’, ‘tuts-crm’ ),
‘edit_item’ => __( ‘Edit Contact’, ‘tuts-crm’ ),
‘view_item’ => __( ‘View Contact’, ‘tuts-crm’ ),
‘all_items’ => __( ‘All Contacts’, ‘tuts-crm’ ),
‘search_items’ => __( ‘Search Contacts’, ‘tuts-crm’ ),
‘parent_item_colon’ => __( ‘Parent Contacts:’, ‘tuts-crm’ ),
‘not_found’ => __( ‘No conttacts found.’, ‘tuts-crm’ ),
‘not_found_in_trash’ => __( ‘No contacts found in Trash.’, ‘tuts-crm’ ),
),
// Frontend
‘has_archive’ => false,
‘public’ => false,
‘publicly_queryable’ => false,
// Admin
‘capability_type’ => ‘post’,
‘menu_icon’ => ‘dashicons-businessman’,
‘menu_position’ => 10,
‘query_var’ => true,
‘show_in_menu’ => true,
‘show_ui’ => true,
‘supports’ => array(
‘title’,
‘author’,
‘comments’,
),
) );
}
|
Это регистрирует пользовательский тип сообщения, называемый контактом . register_post_type
принимает следующий массив аргументов:
ключ | Описание |
---|---|
этикетки | Массив меток, описывающих этот тип поста. Они используются в администрации WordPress. |
has_archive | Включает архивы на веб-сайте внешнего интерфейса. |
общественности | Должен ли тип публикации быть доступен на веб-сайте администрирования и внешнего интерфейса WordPress. |
publicly_queryable | Можно ли запросить этот пользовательский тип сообщения на веб-сайте внешнего интерфейса. |
capability_type | Используется для определения возможностей, которые пользователь должен иметь для добавления, редактирования и удаления сообщений для этого типа сообщений. Это может быть существующая возможность (например, post ) |
menu_icon | Либо URL-адрес изображения значка меню, либо класс dashicons- (3.8 или выше). Используется в администрации WordPress. |
menu_position | Число, указывающее, где в меню администрирования WordPress отображать этот элемент. Меньшее число означает, что оно появляется раньше. |
query_var | Устанавливает query_var для этого типа поста. По умолчанию используется имя типа пользовательской записи. |
show_in_menu | Показывать ли этот пользовательский тип сообщения в меню администрирования WordPress. |
show_ui | Следует ли создавать пользовательский интерфейс в администрировании WordPress, чтобы разрешать добавление, редактирование и удаление сообщений для этого пользовательского типа сообщений. |
опоры | Массив, детализирующий поля, доступные для этого Пользовательского Типа Сообщения. Примеры включают title , editor , excerpt и page-attributes |
Сохраните свой плагин, а затем просмотрите панель управления WordPress. Вы должны увидеть новый пункт меню под названием Контакты :
Нажмите на эту запись, и вы увидите знакомый интерфейс с тем, который вы используете для управления сообщениями и страницами:
Давайте продолжим и добавим наш первый контакт. Нажмите «Добавить новый», а затем поместите «Джо Блоггс» в поле «Название», прежде чем нажать «Опубликовать».
Наконец, нам нужно проверить сохраненный пользовательский тип сообщения. Нажмите «Контакты» в меню администрирования WordPress, и вы увидите наш новый контакт:
Следующий…
В следующей статье мы собираемся добавить настраиваемые поля в наш контактный пользовательский тип публикации, что позволит нам хранить больше информации о наших клиентах и клиентах.