Как добавить автоматические подписки на изменения тикетов в WordPress

В системах управления тикетами на 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 и другими каналами оповещений.

Как настроить кастомные уведомления о тикетах в WordPress
14.01.2026
Как добавить автоматическое сообщение при создании тикета в WordPress
01.01.2026
Как избежать проблем с пропусками AJAX вызовов в системе тикетов WordPress
10.06.2026
Как сделать автоматическую архивацию истории тикетов в WordPress
13.02.2026
Оптимизация обработки AJAX-запросов в тикет-системе WordPress
18.06.2026