Как добавить автоматическое сообщение о закрытии тикета в WPtickets

Диагностика задачи: зачем нужно сообщение о закрытии тикета

При работе с системой поддержки на WordPress с помощью WPtickets часто возникает необходимость уведомлять клиента, что его тикет был закрыт. Это важно для повышения прозрачности коммуникации и улучшения клиентского сервиса. По умолчанию WPtickets не отправляет автоматическое сообщение при смене статуса тикета на "закрыт". В этой статье разберём, как добавить такую функциональность с помощью кастомного кода.

Пошаговое решение: автоматическое сообщение при закрытии тикета

1. Используем хук для отслеживания смены статуса тикета

WPtickets хранит статусы тикетов в метаданных и использует стандартные WordPress-хуки. Для реакции на смену статуса используем хук updated_post_meta, проверяя изменение мета-ключа статуса.

function wptickets_auto_close_message( $meta_id, $post_id, $meta_key, $_meta_value ) {
    if ( $meta_key !== '_wpticket_status' ) return; // проверяем мета ключ статуса

    $new_status = $_meta_value;
    if ( $new_status !== 'closed' ) return; // реагируем только на закрытие

    $post = get_post( $post_id );
    if ( ! $post || $post->post_type !== 'wptickets' ) return;

    // Получаем ID автора тикета (клиента)
    $author_id = $post->post_author;

    // Добавляем системный комментарий к тикету
    $message = 'Ваш тикет был закрыт. Если у вас остались вопросы, пожалуйста, создайте новый тикет.';

    wp_insert_comment( array(
        'comment_post_ID' => $post_id,
        'comment_content' => $message,
        'user_id' => 0, // системное сообщение
        'comment_author' => 'Система поддержки',
        'comment_approved' => 1,
        'comment_type' => 'wpticket_note', // тип комментария для заметок
    ) );

    // Отправляем email клиенту
    $user = get_user_by( 'ID', $author_id );
    if ( $user && $user->user_email ) {
        $subject = 'Ваш тикет #' . $post_id . ' закрыт';
        $body = "Здравствуйте,\n\nВаш тикет был закрыт. Если у вас есть дополнительные вопросы, пожалуйста, свяжитесь с нами снова.\n\nСпасибо!";
        wp_mail( $user->user_email, $subject, $body );
    }
}
add_action( 'updated_postmeta', 'wptickets_auto_close_message', 10, 4 );

2. Куда добавить код

Рекомендуется добавить данный код в файл functions.php вашей дочерней темы или создать небольшой плагин, чтобы код не потерялся при обновлении темы.

Проверка результата после внедрения

  • Откройте любой тикет в админ-панели WPtickets.
  • Измените статус тикета на «закрыт».
  • Проверьте, что в комментариях тикета появился системный комментарий с уведомлением.
  • Убедитесь, что на email пользователя, создавшего тикет, пришло письмо с уведомлением.

Для отладки рекомендуется включить WP_DEBUG и использовать error_log внутри функции при необходимости.

Частые ошибки и как их исправить

  • Письмо не отправляется: проверьте настройки SMTP на сервере или используйте плагины для настройки почты (например, WP Mail SMTP).
  • Сообщение не появляется в комментариях: проверьте правильность мета-ключа статуса, а также что хук updated_postmeta вызывается для нужного поста типа wptickets.
  • Дублирование сообщений: если меняется статус не на «закрыт», убедитесь, что условие строго проверяет статус именно «closed».
  • Проблемы с типом комментария: WPtickets использует разные типы комментариев, важно указать comment_type как wpticket_note для системных заметок.

Практические советы по безопасности и производительности

  • Всегда проверяйте входящие данные и используйте nonce при работе с формами, если добавляете UI для изменения статуса.
  • Не вызывайте тяжелые операции внутри хука – если нужно, используйте очередь или отложенное выполнение (wp_cron).
  • Для улучшения производительности можно кешировать данные пользователя, чтобы не делать лишние запросы к базе при массовом обновлении статусов.

Краткий чек-лист внедрения

  1. Добавить функцию на хук updated_postmeta.
  2. Проверить мета-ключ статуса на «closed».
  3. Добавить комментарий с системным сообщением к тикету.
  4. Отправить email пользователю, создавшему тикет.
  5. Проверить работу на тестовом тикете.
  6. Отладить и устранить ошибки по результатам теста.

Сравнение вариантов реализации

ВариантОписаниеПлюсыМинусы
Код на хуке updated_postmetaОтслеживает смену статуса и выполняет действияГибкость, нет зависимости от сторонних плагиновТребует знаний PHP, возможна нагрузка при массовых изменениях
Плагин автоматизацииГотовые решения для уведомленийПростота установки, часто с UI настройкиМогут быть избыточными, нагрузка на сайт
WP Remark + WPticketsИнтеграция для автоматических сообщений и триггеровДополнительные возможности, удобствоПлатные расширения, сложность настройки
Как автоматизировать процесс распределения тикетов в WordPress
17.12.2025
Как установить права доступа к тикетам WPtickets через capabilities в WordPress
31.05.2026
Как создать автоматический отчет по тикетам в WPtickets для WordPress
24.01.2026
Как создать мультиканальную поддержку в WP Tickets: интеграция email, чата и формы
27.03.2026
Как создать простую классификацию тикетов в WPtickets для WordPress
22.02.2026