Что такое система поддержки (тикетов) и зачем она нужна на сайте WordPress
Система поддержки или тикет-система — это инструмент, который помогает организовать общение с клиентами, посетителями или пользователями сайта. Вместо получения писем на почту и их потери в потоке сообщений, тикет-система собирает все запросы в одном месте, позволяет отслеживать статус решения задач и повышает качество обслуживания.
Для сайта на WordPress это особенно актуально, если вы предоставляете услуги, продаёте товары или ведёте сообщество, где важно быстро решать вопросы пользователей. В этой статье мы рассмотрим, как создать такую систему на базе WordPress с помощью популярных плагинов и как написать собственное решение при помощи кода.
Также разберём основные требования к такой системе и дадим рекомендации по настройке.
Популярные плагины для создания тикет-системы в WordPress
1. Awesome Support — многофункциональный и бесплатный
Awesome Support — один из лучших бесплатных плагинов для организации поддержки на WordPress. Он позволяет создавать тикеты, назначать их исполнителям, обмениваться комментариями, прикреплять файлы, а также поддерживает расширения для интеграции с WooCommerce, Slack и другими сервисами.
Преимущества:
- Простой интерфейс для пользователей и администраторов
- Поддержка кастомных полей в формах тикетов
- Возможность создавать неограниченное количество тикетов
- Множество расширений (платных) для интеграций и улучшений
Установка и настройка:
Для установки зайдите в админку WordPress → Плагины → Добавить новый и введите «Awesome Support» в поиске. После активации перейдите в меню «Awesome Support» и настройте статусы тикетов, роли пользователей и уведомления.
2. WP Support Plus Responsive Ticket System
Этот плагин бесплатен, легко настраивается и имеет адаптивный дизайн. Поддерживает мультисайты, позволяет создавать категории тикетов, фильтры, уведомления по email и интеграцию с Google reCAPTCHA для защиты от спама.
Он отлично подойдёт для небольших проектов, где нужна простая и удобная система поддержки без лишних наворотов.
Создаем простую тикет-систему с помощью кастомного кода
Если вы хотите сделать уникальное решение или не хотите использовать сторонние плагины, можно реализовать базовую тикет-систему самостоятельно. Ниже приведён пример, как создать кастомный тип записи «wptickets_ticket» для хранения тикетов и простой шорткод для отображения формы и списка тикетов пользователя.
Регистрация кастомного типа записи тикетов
function wptickets_register_ticket_post_type() {
$labels = array(
'name' => 'Тикеты',
'singular_name' => 'Тикет',
'add_new' => 'Добавить тикет',
'add_new_item' => 'Добавить новый тикет',
'edit_item' => 'Редактировать тикет',
'new_item' => 'Новый тикет',
'view_item' => 'Просмотреть тикет',
'search_items' => 'Поиск тикетов',
'not_found' => 'Тикеты не найдены',
'not_found_in_trash' => 'В корзине тикеты не найдены',
);
$args = array(
'labels' => $labels,
'public' => false,
'show_ui' => true,
'capability_type' => 'post',
'hierarchical' => false,
'supports' => array('title', 'editor', 'author'),
'menu_position' => 20,
'menu_icon' => 'dashicons-sos',
'exclude_from_search'=> true,
'publicly_queryable' => false,
'has_archive' => false,
);
register_post_type('wptickets_ticket', $args);
}
add_action('init', 'wptickets_register_ticket_post_type');Создание шорткода для отображения формы создания тикета и списка тикетов пользователя
Добавим шорткод [wptickets_ticket_system], который будет выводить форму для создания тикета и список уже созданных тикетов текущего пользователя.
function wptickets_ticket_form_shortcode() {
if (!is_user_logged_in()) {
return '<p>Пожалуйста, войдите, чтобы создать тикет.</p>';
}
$output = '';
// Обработка отправки формы
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['wptickets_ticket_nonce']) && wp_verify_nonce($_POST['wptickets_ticket_nonce'], 'wptickets_submit_ticket')) {
$title = sanitize_text_field($_POST['ticket_title']);
$content = sanitize_textarea_field($_POST['ticket_content']);
if ($title && $content) {
$new_ticket = array(
'post_title' => $title,
'post_content' => $content,
'post_status' => 'publish',
'post_type' => 'wptickets_ticket',
'post_author' => get_current_user_id(),
);
$post_id = wp_insert_post($new_ticket);
if ($post_id) {
$output .= '<p>Тикет успешно создан.</p>';
} else {
$output .= '<p>Ошибка при создании тикета.</p>';
}
} else {
$output .= '<p>Пожалуйста, заполните все поля формы.</p>';
}
}
// Форма создания тикета
$output .= '<form method="post">';
$output .= '<label>Заголовок тикета:<input type="text" name="ticket_title" required /></label><br />';
$output .= '<label>Описание проблемы:<textarea name="ticket_content" required></textarea></label><br />';
$output .= wp_nonce_field('wptickets_submit_ticket', 'wptickets_ticket_nonce', true, false);
$output .= '<input type="submit" value="Создать тикет" />';
$output .= '</form>';
// Вывод списка тикетов пользователя
$tickets = get_posts(array(
'post_type' => 'wptickets_ticket',
'author' => get_current_user_id(),
'posts_per_page' => -1,
'post_status' => 'publish',
));
if ($tickets) {
$output .= '<h3>Ваши тикеты:</h3><ul>';
foreach ($tickets as $ticket) {
$output .= '<li><strong>' . esc_html($ticket->post_title) . '</strong> - ' . esc_html(wp_trim_words($ticket->post_content, 15)) . '</li>';
}
$output .= '</ul>';
} else {
$output .= '<p>У вас пока нет тикетов.</p>';
}
return $output;
}
add_shortcode('wptickets_ticket_system', 'wptickets_ticket_form_shortcode');Расширение функционала: уведомления и статусы тикетов
В реальных системах поддержки важно информировать пользователя и администратора о статусах тикета и новых сообщениях. Для этого можно добавить метаполя для хранения статуса (например, «Открыт», «В работе», «Закрыт») и отправлять email-уведомления при создании или обновлении тикета.
Добавим метаполе статуса и простой пример отправки email администраторам при создании тикета:
function wptickets_set_default_status($post_id, $post, $update) {
if ($post->post_type !== 'wptickets_ticket' || $update) {
return;
}
add_post_meta($post_id, '_wptickets_status', 'Открыт', true);
// Отправка email администраторам
$admins = get_users(array('role' => 'administrator'));
$subject = 'Новый тикет создан';
$message = 'Пользователь ' . get_the_author_meta('display_name', $post->post_author) . ' создал новый тикет: "' . $post->post_title . '". Просмотреть: ' . get_edit_post_link($post_id);
foreach ($admins as $admin) {
wp_mail($admin->user_email, $subject, $message);
}
}
add_action('wp_insert_post', 'wptickets_set_default_status', 10, 3);Для управления статусами можно создать пользовательские таксономии или метаполя с выпадающим списком в админке. Это позволит сотрудникам поддержки менять статус решения задачи и отслеживать прогресс.
Рекомендации по безопасности и удобству использования
При создании тикет-системы важно защитить сайт от спама и неавторизованного доступа. Несколько советов:
- Используйте
wp_nonce_fieldи проверяйте nonce при обработке форм. - Разрешайте создавать тикеты только авторизованным пользователям, либо добавьте капчу (Google reCAPTCHA).
- Ограничьте просмотр тикетов только их авторам и администраторам.
- Регулярно обновляйте плагины и WordPress для безопасности.
Также продумайте удобный интерфейс для поддержки и пользователей, чтобы они могли легко создавать и отслеживать свои обращения.