В системах поддержки и тикетах важно своевременно информировать пользователей и администраторов о новых событиях: создании тикета, изменении статуса или добавлении комментариев. Стандартные уведомления WordPress часто не соответствуют нуждам конкретного проекта, поэтому полезно уметь создавать кастомные уведомления под свои задачи.
Почему нужны кастомные уведомления в системе тикетов WordPress
Стандартные механизмы уведомлений в WordPress ограничены и не всегда позволяют гибко настраивать содержание письма, адресатов и логику отправки. В системах тикетов это критично, так как пользователи ждут конкретной информации и часто в письмах должны быть ссылки на тикет, статусы и другая полезная информация.
Также компании хотят добавить дополнительную логику: например, уведомления только при определённых статусах, или отправлять письма разным отделам, либо персонализировать шаблоны под бренд.
Рассмотрим, как реализовать кастомные уведомления с помощью собственного кода и с использованием популярных плагинов.
Использование хуков для кастомизации уведомлений о тикетах
Если вы используете собственную систему тикетов, например построенную на базе Custom Post Type, то уведомления можно добавить через хуки WordPress.
Пример функции, которая отправляет письмо при создании тикета:
function wpticket_send_new_ticket_notification( $ticket_id ) {
$ticket = get_post( $ticket_id );
if ( 'ticket' !== $ticket->post_type ) {
return;
}
$user = get_userdata( $ticket->post_author );
$to = $user->user_email;
$subject = 'Ваш тикет принят: ' . $ticket->post_title;
$message = 'Здравствуйте, ' . $user->display_name . "!\n";
$message .= 'Ваш тикет был успешно создан. Вы можете просмотреть его по ссылке: ' . get_permalink( $ticket_id );
wp_mail( $to, $subject, $message );
}
add_action( 'wp_insert_post', 'wpticket_send_new_ticket_notification', 10, 1 );Эта функция отправит письмо пользователю сразу после создания тикета. Можно дополнительно фильтровать события, чтобы уведомления не отправлялись при обновлении, а только при создании.
Чтобы отправлять уведомления при изменении статуса, можно использовать мета-поля или таксономии для статусов и отслеживать изменения через хук save_post с сохранением предыдущего значения.
Отслеживание изменения статуса тикета для уведомлений
Для этого добавим функцию, которая сравнивает старый и новый статус, и при изменении отправляет письмо:
function wpticket_notify_status_change( $post_id, $post_after, $post_before ) {
if ( $post_after->post_type !== 'ticket' ) {
return;
}
$old_status = get_post_meta( $post_id, '_ticket_status', true );
$new_status = isset( $_POST['ticket_status'] ) ? sanitize_text_field( $_POST['ticket_status'] ) : '';
if ( $new_status && $new_status !== $old_status ) {
update_post_meta( $post_id, '_ticket_status', $new_status );
$user = get_userdata( $post_after->post_author );
$to = $user->user_email;
$subject = 'Статус вашего тикета изменён';
$message = "Здравствуйте, {$user->display_name}!\n";
$message .= "Статус вашего тикета '{$post_after->post_title}' изменён на: {$new_status}.\n";
$message .= 'Посмотреть тикет: ' . get_permalink( $post_id );
wp_mail( $to, $subject, $message );
}
}
add_action( 'post_updated', 'wpticket_notify_status_change', 10, 3 );Обратите внимание, что здесь предполагается, что статус хранится в мета-поле _ticket_status и обновляется через форму редактирования.
Популярные плагины для управления уведомлениями тикетов в WordPress
Если вы хотите готовое решение, обратите внимание на плагины, которые позволяют гибко настраивать уведомления:
- Expert Review — расширенный плагин для работы с отзывами и тикетами, который включает гибкую систему уведомлений с шаблонами писем.
- WPRemark — плагин комментариев и обратной связи с возможностью настройки уведомлений пользователям и администраторам.
- My Popup — позволяет создавать уведомления и всплывающие окна, которые можно использовать для информирования посетителей о статусах тикетов или важных обновлениях.
Эти плагины помогут вам без глубокого погружения в код настроить качественные уведомления с удобным интерфейсом.
Создание шаблонов писем для уведомлений о тикетах
Чтобы письма выглядели профессионально и содержали всю необходимую информацию, стоит использовать HTML-шаблоны с переменными.
Пример базового шаблона письма:
function wpticket_get_email_template( $user_name, $ticket_title, $ticket_link, $status ) {
return "<html><body>
<h2>Здравствуйте, {$user_name}!</h2>
<p>Статус вашего тикета <strong>{$ticket_title}</strong> изменён на <strong>{$status}</strong>.</p>
<p>Вы можете просмотреть тикет по ссылке: <a href='" . esc_url( $ticket_link ) . "'>Открыть тикет</a>.</p>
<hr>
<p>Это автоматическое сообщение от сайта.</p>
</body></html>";
}Чтобы отправить письмо с HTML, используйте заголовки в wp_mail:
add_filter( 'wp_mail_content_type', function() { return 'text/html'; } );
wp_mail( $to, $subject, wpticket_get_email_template( $user_name, $ticket_title, $ticket_link, $status ) );
remove_filter( 'wp_mail_content_type', 'set_html_content_type' );Обработка вложений и дополнительные данные в уведомлениях
В системах тикетов часто требуется прикреплять файлы к сообщениям и уведомлениям. Для этого в функцию отправки письма можно добавить параметр $attachments.
Пример отправки письма с вложением:
$attachments = array( WP_CONTENT_DIR . '/uploads/ticket-attachments/file1.pdf' );
wp_mail( $to, $subject, $message, $headers, $attachments );Убедитесь, что у вас есть безопасная и удобная система загрузки файлов в тикеты, чтобы прикреплять их к уведомлениям.
Резюме по настройке кастомных уведомлений
Для эффективных уведомлений в системе тикетов на WordPress рекомендуем:
- Использовать хуки
wp_insert_postиpost_updatedдля отправки писем при создании и изменении тикетов. - Хранить статусы тикетов в мета-полях и отслеживать их изменения.
- Создавать HTML-шаблоны писем с переменными для персонализации.
- Использовать плагины Expert Review или WPRemark для расширенной работы с уведомлениями без кода.
- Добавлять вложения в письма, если требуется отправлять файлы.
Такой подход обеспечит удобное и профессиональное взаимодействие с пользователями и сотрудниками через систему тикетов.