Как сделать автоматическую архивацию истории тикетов в WordPress

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

Почему важна автоматическая архивация тикетов

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

  • Уменьшить нагрузку на базу данных и ускорить загрузку страниц с текущими тикетами.
  • Сделать интерфейс более удобным — старые заявки не мешают оператору.
  • Обеспечить сохранность данных для аудита и статистики.

Для WordPress такой функционал не всегда есть из коробки, поэтому его приходится делать самостоятельно или через сторонние решения.

Как реализовать автоматическую архивацию тикетов программно

Предположим, у вас есть кастомный тип записей ticket, в котором хранятся тикеты. Задача — периодически переносить тикеты, закрытые более 30 дней назад, в архив (например, менять статус или добавлять метку).

Шаг 1. Добавляем новый статус для архивных тикетов

WordPress по умолчанию не имеет статуса «архив», поэтому добавим его:

function wpticket_register_ticket_archive_status() {
    register_post_status('archived', array(
        'label'                     => _x('Архив', 'post'),
        'public'                    => false,
        'exclude_from_search'       => true,
        'show_in_admin_all_list'    => false,
        'show_in_admin_status_list' => true,
        'label_count'               => _n_noop('Архив <span class="count">(%s)</span>', 'Архив <span class="count">(%s)</span>'),
    ));
}
add_action('init', 'wpticket_register_ticket_archive_status');

Этот код добавляет новый статус, который не отображается на сайте, но виден в админке.

Шаг 2. Создаем функцию для архивации старых тикетов

Напишем функцию, которая найдет все тикеты со статусом closed, у которых дата закрытия старше 30 дней, и переведет их в статус archived:

function wpticket_archive_old_tickets() {
    $args = array(
        'post_type'      => 'ticket',
        'post_status'    => 'closed',
        'date_query'     => array(
            array(
                'column' => 'post_modified_gmt',
                'before' => '30 days ago',
            ),
        ),
        'posts_per_page' => -1,
        'fields'         => 'ids',
    );
    $tickets = get_posts($args);

    foreach ($tickets as $ticket_id) {
        wp_update_post(array(
            'ID'          => $ticket_id,
            'post_status' => 'archived',
        ));
    }
}

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

Шаг 3. Запускаем функцию по расписанию

Чтобы автоматизировать процесс, создадим cron-задачу WordPress, которая будет запускать функцию раз в сутки:

function wpticket_schedule_archive_cron() {
    if (!wp_next_scheduled('wpticket_daily_archive_event')) {
        wp_schedule_event(time(), 'daily', 'wpticket_daily_archive_event');
    }
}
add_action('wp', 'wpticket_schedule_archive_cron');

add_action('wpticket_daily_archive_event', 'wpticket_archive_old_tickets');
<

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

Использование плагинов для управления тикетами и архивацией

Если вы предпочитаете готовые решения, обратите внимание на плагины, которые позволяют строить полноценные тикет-системы с возможностью архивации:

  • Expert Review — плагин для отзывов и тикетов, в котором есть функционал статусов и фильтров. Можно настроить автоматические действия через хуки плагина.
  • WPRemark — современный инструмент для комментариев и тикетов, поддерживает кастомные статусы и автоматизацию.

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

Как отображать архивные тикеты в админке и на сайте

Добавленный статус archived не отображается в обычных списках тикетов, но иногда нужно получить к ним доступ. Для этого можно добавить фильтр в админку:

function wpticket_add_archived_status_to_filter($post_statuses) {
    $post_statuses['archived'] = 'Архив';
    return $post_statuses;
}
add_filter('display_post_states', 'wpticket_add_archived_status_to_filter');

Также можно создавать отдельные страницы или виджеты, где будут выводиться архивные тикеты по запросу с post_status=archived.

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

$archived_tickets = get_posts(array(
    'post_type' => 'ticket',
    'post_status' => 'archived',
    'posts_per_page' => 20,
));

Далее можно вывести список на фронтенде для поддержки пользователей или аналитиков.

Рекомендации по оптимизации и безопасности

При реализации архивации важно учесть несколько моментов:

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

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

Выводы и полезные ссылки

Автоматическая архивация тикетов — важный элемент поддержания производительности и удобства работы с системой заявок. Используя приведенный пример, вы сможете самостоятельно добавить такой функционал в ваш сайт на WordPress. Также рекомендуем изучить плагины Expert Review и WPRemark для расширенных возможностей.

Полезные ссылки:

Как создать автоматический отчет о проблемах в тикет-системе WordPress
26.02.2026
Как решить проблему не работающих AJAX-запросов в тикет-системе WordPress
21.05.2026
Как удалить неиспользуемые плагины WordPress без остатков
07.05.2026
Как добавить автоматическое сообщение при создании тикета в WordPress
01.01.2026
Как использовать WP-Cron для автоматизации задач в тикет-системе WordPress
01.05.2026