Как создать автоматический отчет по просмотру тикетов в WPtickets для WordPress

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

Почему важен отчет по просмотрам тикетов в WPtickets

Отслеживание просмотров позволяет понять, какие тикеты обрабатываются, сколько раз они открывались, и кто именно их просматривал. Это помогает повысить прозрачность работы службы поддержки, выявить узкие места и оптимизировать процесс обслуживания клиентов.

WPtickets по умолчанию ведет историю тикетов, но не всегда предоставляет удобные отчеты по просмотрам. Чтобы получить расширенную аналитику, можно добавить кастомный функционал.

Создание таблицы для хранения просмотров тикетов

Первым шагом создадим кастомную таблицу в базе данных WordPress для хранения информации о просмотрах тикетов. Используем хук wptickets_create_views_table для создания таблицы при активации темы или плагина.

function wptickets_create_views_table() {
  global $wpdb;
  $table_name = $wpdb->prefix . 'wptickets_ticket_views';
  $charset_collate = $wpdb->get_charset_collate();

  $sql = "CREATE TABLE IF NOT EXISTS $table_name (
    id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
    ticket_id BIGINT(20) UNSIGNED NOT NULL,
    user_id BIGINT(20) UNSIGNED DEFAULT NULL,
    view_time DATETIME NOT NULL,
    PRIMARY KEY (id),
    KEY ticket_id (ticket_id),
    KEY user_id (user_id)
  ) $charset_collate;";

  require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
  dbDelta($sql);
}
register_activation_hook(__FILE__, 'wptickets_create_views_table');

Эта таблица будет хранить ID тикета, ID пользователя, который смотрел тикет (если авторизован), и время просмотра.

Отслеживание просмотров тикетов: запись данных в базу

Далее нужно добавить код, который будет фиксировать просмотр тикета. Предположим, что страница просмотра тикета содержит ID в URL или в глобальной переменной. Добавим функцию, которая вызывается при загрузке страницы тикета:

function wptickets_log_ticket_view() {
  if (!is_singular('wpticket')) return; // замените 'wpticket' на ваш тип записи тикета

  $ticket_id = get_the_ID();
  $user_id = get_current_user_id() ?: null;
  $view_time = current_time('mysql');

  global $wpdb;
  $table_name = $wpdb->prefix . 'wptickets_ticket_views';

  // Проверим, есть ли уже просмотр от этого пользователя за последние 10 минут, чтобы не засорять базу
  $ten_minutes_ago = date('Y-m-d H:i:s', strtotime('-10 minutes', current_time('timestamp')));
  $exists = $wpdb->get_var($wpdb->prepare(
    "SELECT COUNT(*) FROM $table_name WHERE ticket_id = %d AND user_id %s AND view_time > %s",
    $ticket_id,
    $user_id ? '= ' . $user_id : 'IS NULL',
    $ten_minutes_ago
  ));

  if (!$exists) {
    $wpdb->insert($table_name, [
      'ticket_id' => $ticket_id,
      'user_id' => $user_id,
      'view_time' => $view_time,
    ]);
  }
}
add_action('wp', 'wptickets_log_ticket_view');

Такой подход уменьшит количество повторных записей при частых обновлениях страницы одним пользователем.

Создание страницы или админ-отчета с данными просмотров

Теперь нужно вывести отчет с информацией о просмотрах. Для простоты сделаем страницу в админке WordPress с таблицей и фильтрами.

function wptickets_add_views_report_page() {
  add_submenu_page(
    'edit.php?post_type=wpticket',
    'Отчет по просмотрам тикетов',
    'Отчет просмотров',
    'manage_options',
    'wptickets-views-report',
    'wptickets_render_views_report_page'
  );
}
add_action('admin_menu', 'wptickets_add_views_report_page');

function wptickets_render_views_report_page() {
  global $wpdb;
  $table_name = $wpdb->prefix . 'wptickets_ticket_views';

  // Получаем данные отчетов, можно добавить пагинацию и фильтры
  $results = $wpdb->get_results("SELECT ticket_id, COUNT(*) AS views_count, MAX(view_time) AS last_view FROM $table_name GROUP BY ticket_id ORDER BY last_view DESC");

  echo '<div class="wrap"><h1>Отчет по просмотрам тикетов</h1>';
  echo '<table class="wp-list-table widefat fixed striped">';
  echo '<thead><tr><th>ID Тикета</th><th>Название</th><th>Количество просмотров</th><th>Последний просмотр</th></tr></thead><tbody>';

  foreach ($results as $row) {
    $title = get_the_title($row->ticket_id);
    echo "<tr><td>{$row->ticket_id}</td><td>{$title}</td><td>{$row->views_count}</td><td>{$row->last_view}</td></tr>";
  }

  echo '</tbody></table></div>';
}

Эта страница выведет список тикетов с количеством просмотров и временем последнего просмотра, что поможет оценить активности по каждому запросу.

Использование сторонних плагинов для расширения отчетности

Если хочется сделать отчет более функциональным с графиками и экспортом, можно использовать плагин WPRemark от WPShop. Он поддерживает кастомные отчеты и интеграцию с WPtickets, что позволит сделать аналитику удобнее.

Еще один вариант — плагин ABC Pagination, который поможет добавить удобную навигацию для больших отчетов.

Выводы и рекомендации по внедрению отчета просмотров

Создание автоматического отчета просмотров тикетов в WPtickets помогает улучшить прозрачность работы службы поддержки. Предложенный код легко адаптируется под конкретные задачи и расширяется дополнительными фильтрами или интеграциями.

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

Также обратите внимание на безопасность: не выводите чувствительные данные в отчетах и проверяйте права доступа к странице отчета.

Установка и настройка WPtickets плагина для поддержки клиентов в WordPress
24.11.2025
Ограничение доступа к тикетам в WPtickets: настройка и решение проблем
12.06.2026
Как создать автоматическое присваивание приоритета тикетам в WPtickets
31.01.2026
Как добавить событие изменения статуса тикета в WPtickets для WordPress
05.03.2026
Создание распределения тикетов по агентам в WPtickets для WordPress
20.03.2026