WPtickets — мощный плагин для поддержки клиентов и управления тикетами в WordPress. Часто возникает задача добавить кастомные действия или уведомления при смене статуса тикета, например, для интеграции с внешними сервисами, аналитикой или для расширения функционала сайта. В этой статье мы подробно разберём, как добавить событие изменения статуса тикета в WPtickets с помощью хуков и собственного кода.
Почему важно отслеживать изменение статуса тикета в WPtickets
Статусы тикетов позволяют точно контролировать этапы обработки заявок клиентов. При изменении статуса полезно запускать дополнительные действия, например:
- Отправлять кастомные уведомления в Slack, Telegram или другие мессенджеры.
- Обновлять CRM-систему или базу данных внешних сервисов.
- Вести логи и аналитику по работе службы поддержки.
- Автоматически назначать задачи сотрудникам или менять приоритеты.
Без отслеживания таких событий невозможно гибко управлять процессами поддержки и эффективно использовать данные о работе с тикетами.
Какие хуки предоставляет WPtickets для работы со статусами
WPtickets использует собственные хуки на базе WordPress, которые можно использовать для запуска кода при изменении тикета. Основные из них:
wptickets_status_changed— срабатывает после изменения статуса тикета, передаёт ID тикета, старый и новый статус.wptickets_before_status_change— срабатывает до изменения статуса, можно отменить изменение.
Для примера мы будем использовать хук wptickets_status_changed, который идеально подходит для наших целей.
Пример использования хука wptickets_status_changed
Добавим в файл темы или в отдельный плагин следующий код:
add_action('wptickets_status_changed', 'wpticketsru_on_status_changed', 10, 3);
function wpticketsru_on_status_changed($ticket_id, $old_status, $new_status) {
// Получаем объект тикета
$ticket = WPTickets\Tickets\get_ticket($ticket_id);
if (!$ticket) return;
// Логируем изменение статуса
error_log("[WPticketsru] Тикет #{$ticket_id} изменил статус с '{$old_status}' на '{$new_status}'");
// Пример: Отправляем уведомление в Telegram (требует настройки Telegram API)
// wpticketsru_send_telegram_message("Тикет #{$ticket_id} изменил статус: {$new_status}");
// Другие кастомные действия...
}Обратите внимание, что здесь мы используем функцию WPTickets\Tickets\get_ticket() для получения данных тикета. Это стандартный способ WPtickets работать с тикетами в коде.
Как реализовать отправку уведомления при смене статуса
Для примера добавим отправку простого уведомления на email администратору сайта:
function wpticketsru_on_status_changed($ticket_id, $old_status, $new_status) {
$ticket = WPTickets\Tickets\get_ticket($ticket_id);
if (!$ticket) return;
$to = get_option('admin_email');
$subject = "Изменение статуса тикета #{$ticket_id}";
$message = "Статус тикета с темой '{$ticket->post_title}' изменился с '{$old_status}' на '{$new_status}'.";
wp_mail($to, $subject, $message);
}
add_action('wptickets_status_changed', 'wpticketsru_on_status_changed', 10, 3);Таким образом, вы будете автоматически получать письма о каждом изменении статуса, что поможет оперативно реагировать на процесс поддержки.
Как добавить отмену изменения статуса при определённых условиях
Иногда необходимо запретить смену статуса при выполнении определённых условий, например, если тикет в работе, а пользователь пытается перевести его в новый статус без выполнения задачи.
Для этого используйте хук wptickets_before_status_change. Пример:
add_filter('wptickets_before_status_change', 'wpticketsru_prevent_invalid_status_change', 10, 4);
function wpticketsru_prevent_invalid_status_change($allow, $ticket_id, $old_status, $new_status) {
// Запретить перевод статуса с 'in_progress' в 'new'
if ($old_status === 'in_progress' && $new_status === 'new') {
// Можно вывести сообщение или лог
error_log("[WPticketsru] Запрещена смена статуса с in_progress на new для тикета #{$ticket_id}");
return false; // Отменяем смену статуса
}
return $allow;
}Это позволяет контролировать логику работы с тикетами и избегать ошибок в процессе обработки.
Интеграция с WPRemark для расширения уведомлений и автоприсваивания
Для расширения функционала уведомлений и автоматизации распределения тикетов можно подключить плагин WPRemark. Он отлично интегрируется с WPtickets и позволяет создавать сложные правила на основе событий, в том числе смены статуса.
Например, при смене статуса можно автоматически присваивать тикет определённому сотруднику или запускать цепочку уведомлений в мессенджерах.
Резюме и рекомендации по использованию событий смены статуса
Добавление событий на смену статуса тикета в WPtickets — это эффективный способ расширить функционал поддержки и улучшить автоматизацию. Используйте хук wptickets_status_changed для выполнения действий после смены, и wptickets_before_status_change для валидации и отмены изменений.
Рекомендуется писать код в виде плагина или использовать functions.php дочерней темы, чтобы не потерять изменения при обновлении WPtickets.
Также стоит протестировать все сценарии на тестовом сайте, чтобы избежать сбоев в работе поддержки.
Для более сложных задач рассмотрите интеграцию с WPRemark, который расширяет возможности автоматизации на базе событий WPtickets.