В системах управления тикетами на WordPress часто возникает задача уведомлять заинтересованных пользователей о любых изменениях в тикетах: обновлении статуса, появлении комментариев, прикреплении файлов и так далее. В этой статье рассмотрим, как реализовать автоматические подписки на изменения тикетов, чтобы пользователи получали оповещения без необходимости вручную подписываться на каждый тикет.
Зачем нужны автоматические подписки на изменения тикетов в WordPress
Если вы разрабатываете или поддерживаете тикет-систему на WordPress, например, для службы поддержки, автоматические подписки значительно повышают удобство работы пользователей и сотрудников. Подписчики всегда в курсе событий, что ускоряет коммуникацию и решает задачи быстрее.
Вместо того, чтобы просить пользователей вручную подписываться на тикеты, можно реализовать автоматическую подписку для:
- автора тикета — чтобы он получал уведомления о статусе;
- назначенных исполнителей — чтобы сотрудники не пропускали обновления;
- комментаторов — для информирования о новых комментариях;
- менеджеров или администраторов — для контроля за процессом.
Такой подход снижает нагрузку на службу поддержки и повышает вовлечённость пользователей.
Как реализовать автоматические подписки на изменения тикетов в WordPress (пример кода)
Предположим, что тикеты — это кастомный тип записей ticket, а комментарии — стандартные комментарии WordPress. Для реализации подписок нам нужно сохранять список подписчиков в мета-данных тикета и отправлять уведомления при обновлениях.
1. Добавление пользователя в подписчики при создании тикета
Добавим автора тикета в список подписчиков сразу при создании записи:
function wpticket_add_author_to_subscribers($post_ID, $post, $update) {
if ($post->post_type !== 'ticket') return;
if ($update) return; // Только при создании
$author_id = $post->post_author;
if (!$author_id) return;
update_post_meta($post_ID, '_wpticket_subscribers', array($author_id));
}
add_action('wp_insert_post', 'wpticket_add_author_to_subscribers', 10, 3);2. Автоматическое добавление комментаторов в подписчики
Когда пользователь оставляет комментарий к тикету, добавим его в подписчики, чтобы он получал уведомления о новых комментариях:
function wpticket_add_commenter_to_subscribers($comment_ID, $comment_approved) {
if (1 !== $comment_approved) return;
$comment = get_comment($comment_ID);
$post_id = $comment->comment_post_ID;
$post = get_post($post_id);
if ($post->post_type !== 'ticket') return;
$subscribers = get_post_meta($post_id, '_wpticket_subscribers', true);
if (!is_array($subscribers)) $subscribers = array();
if (!in_array($comment->user_id, $subscribers) && $comment->user_id != 0) {
$subscribers[] = $comment->user_id;
update_post_meta($post_id, '_wpticket_subscribers', $subscribers);
}
}
add_action('comment_post', 'wpticket_add_commenter_to_subscribers', 10, 2);3. Отправка уведомлений подписчикам при изменениях в тикете
Теперь отправим уведомления всем подписчикам, кроме автора изменения, когда тикет обновляется или добавляется комментарий:
function wpticket_notify_subscribers_on_update($post_ID, $post_after, $post_before) {
if ($post_after->post_type !== 'ticket') return;
if ($post_after->post_status !== 'publish') return;
// Проверяем, что есть изменения в содержимом или статусе
if ($post_after->post_content === $post_before->post_content &&
$post_after->post_status === $post_before->post_status) return;
$subscribers = get_post_meta($post_ID, '_wpticket_subscribers', true);
if (!is_array($subscribers)) return;
// Отправитель уведомления - текущий пользователь
$current_user_id = get_current_user_id();
foreach ($subscribers as $user_id) {
if ($user_id == $current_user_id) continue; // Не отправлять себе
$user_info = get_userdata($user_id);
if (!$user_info) continue;
$subject = 'Обновление тикета №' . $post_ID;
$message = 'Тикет "' . $post_after->post_title . '" был обновлен. Просмотреть: ' . get_permalink($post_ID);
wp_mail($user_info->user_email, $subject, $message);
}
}
add_action('post_updated', 'wpticket_notify_subscribers_on_update', 10, 3);
// Уведомления при новых комментариях
function wpticket_notify_subscribers_on_comment($comment_ID, $comment_approved) {
if (1 !== $comment_approved) return;
$comment = get_comment($comment_ID);
$post_id = $comment->comment_post_ID;
$post = get_post($post_id);
if ($post->post_type !== 'ticket') return;
$subscribers = get_post_meta($post_id, '_wpticket_subscribers', true);
if (!is_array($subscribers)) return;
$current_user_id = $comment->user_id;
foreach ($subscribers as $user_id) {
if ($user_id == $current_user_id) continue;
$user_info = get_userdata($user_id);
if (!$user_info) continue;
$subject = 'Новый комментарий в тикете №' . $post_id;
$message = 'В тикете "' . $post->post_title . '" появился новый комментарий. Просмотреть: ' . get_comment_link($comment_ID);
wp_mail($user_info->user_email, $subject, $message);
}
}
add_action('comment_post', 'wpticket_notify_subscribers_on_comment', 10, 2);Дополнительные возможности и плагины для подписок в WordPress
Чтобы расширить функциональность подписок и уведомлений, можно использовать готовые плагины:
- WPRemark — плагин для комментариев с расширенными функциями, включая подписки на комментарии и уведомления.
- Clearfy Pro — оптимизирует работу сайта и может помочь с настройкой уведомлений.
Если ваша тикет-система построена на базе плагина, проверьте, возможно ли реализовать подписки через его API или встроенные настройки. В некоторых случаях удобнее интегрировать кастомный код с плагинами, чем создавать всё с нуля.
Как управлять подписками и отписываться
Важный момент — дать пользователям возможность управлять своими подписками. Можно добавить на страницу тикета чекбокс «Отписаться от уведомлений» или отдельный раздел в профиле пользователя.
Пример кода для удаления пользователя из подписчиков:
function wpticket_remove_subscriber($post_id, $user_id) {
$subscribers = get_post_meta($post_id, '_wpticket_subscribers', true);
if (!is_array($subscribers)) return;
$key = array_search($user_id, $subscribers);
if ($key !== false) {
unset($subscribers[$key]);
update_post_meta($post_id, '_wpticket_subscribers', $subscribers);
}
}Для интеграции с интерфейсом можно создать AJAX-запросы и кнопки, которые будут вызывать эту функцию с текущим пользователем.
Итоги
Автоматические подписки на изменения тикетов в WordPress — это простой и эффективный способ улучшить взаимодействие пользователей с системой поддержки. Используя мета-данные записи и стандартные хуки WordPress, вы можете быстро реализовать подписки, уведомления и управление ими.
Подобный функционал можно расширять и адаптировать под конкретные задачи, включая интеграции с почтовыми сервисами, Slack, Telegram и другими каналами оповещений.