Диагностика проблем с отслеживанием статусов тикетов
Часто пользователи WPtickets сталкиваются с ситуацией, когда изменение статуса тикета не отображается корректно в админке или у клиента. Это приводит к путанице и нарушению бизнес-процессов поддержки. Чтобы диагностировать проблему, нужно проверить несколько ключевых аспектов:
- Корректность сохранения статуса в базе данных (таблица wp_wptickets или аналогичная, в зависимости от префикса).
- Работу хуков и фильтров, которые задействованы при смене статуса.
- Влияние кэширования (например, объектный кэш или плагинов кеширования страниц).
- Права доступа у пользователя, особенно если проблема возникает при просмотре статусов.
- Ошибки PHP и JavaScript в консоли браузера, которые могут блокировать обновление интерфейса.
Проверка базы данных
Подключитесь к базе через phpMyAdmin или командой MySQL и выполните запрос, чтобы проверить, сохраняется ли статус:
SELECT ticket_id, ticket_status FROM wp_wptickets_tickets WHERE ticket_id = 123;Замените 123 на ID вашего тикета. Если статус не меняется, значит проблема на стороне сохранения.
Проверка хуков смены статуса
WPtickets использует хуки do_action('wptickets_ticket_status_changed', $ticket_id, $old_status, $new_status). Чтобы проверить, вызывается ли этот хук, добавьте следующий код в functions.php вашей темы или в кастомный плагин:
add_action('wptickets_ticket_status_changed', function($ticket_id, $old_status, $new_status) {
error_log("Ticket #" . $ticket_id . " status changed from " . $old_status . " to " . $new_status);
});После смены статуса проверьте лог ошибок сервера. Если записи нет — хук не вызывается, значит проблема в коде смены статуса.
Пошаговое решение проблемы с отслеживанием статусов
1. Проверка сохранения статуса через WPtickets API
Для программной смены статуса используйте функцию WPtickets_Tickets::update_ticket_status():
$ticket_id = 123; // ID тикета
$new_status = 'closed'; // Новый статус
$result = WPtickets_Tickets::update_ticket_status($ticket_id, $new_status);
if (is_wp_error($result)) {
error_log('Ошибка смены статуса: ' . $result->get_error_message());
} else {
error_log('Статус успешно изменён');
}Если функция возвращает ошибку — проверьте корректность ID и права пользователя.
2. Отключение кэширования для страниц с тикетами
Плагины кеширования могут хранить устаревшую версию страницы. Добавьте в functions.php следующее, чтобы отключить кэш для страниц тикетов:
add_action('template_redirect', function() {
if (is_singular('wptickets_ticket')) {
define('DONOTCACHEPAGE', true);
}
});3. Проверка прав доступа
Убедитесь, что у пользователя есть capability edit_wptickets_tickets. Для добавления прав используйте:
$role = get_role('support_agent');
if ($role && ! $role->has_cap('edit_wptickets_tickets')) {
$role->add_cap('edit_wptickets_tickets');
}Проверка результата после внедрения
После внесения изменений попробуйте сменить статус тикета через админку и проверьте:
- Обновился ли статус в базе данных (повторите SQL-запрос).
- Появились ли записи в логе ошибок с сообщениями о смене статуса.
- Обновился ли статус в пользовательском интерфейсе без кэширования.
- Отправляются ли уведомления (если настроены) на изменение статуса.
Частые ошибки и как исправить
- Хук смены статуса не вызывается: возможно, статус меняется напрямую в базе без использования API WPtickets. Решение: всегда использовать официальные методы плагина.
- Кэширование не отключено: страница не обновляется после смены статуса. Решение: отключить кэш для страниц тикетов.
- Неправильные права доступа: пользователь не видит обновление статуса. Решение: проверить и добавить capability.
- Ошибки JS блокируют обновление интерфейса: проверить консоль браузера и исправить скрипты.
Практические советы по безопасности и производительности
- Не храните статусы тикетов в пользовательских метах напрямую — используйте API плагина для целостности данных.
- Регулярно проверяйте логи ошибок сервера на предмет сбоев в обработке статусов.
- Отключайте кэширование только на нужных страницах, чтобы не снижать производительность всего сайта.
- Проверяйте права пользователей через кастомные роли и capabilities, избегайте дачи лишних прав.
Сравнение способов смены статуса тикета
| Метод | Плюсы | Минусы |
|---|---|---|
Использование WPtickets API (update_ticket_status()) | Корректное обновление, вызов хуков, уведомления | Требует знания API |
| Прямое обновление базы (SQL) | Быстро, просто | Обходит логику плагина, возможны рассинхронизации |
| Ручное изменение через админку WPtickets | Просто, для администраторов | Не подходит для автоматизации |