Как добавить автоматическое удаление старых тикетов в WordPress

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

Почему важно удалять старые тикеты

Удаление старых тикетов помогает:

  • Поддерживать производительность сайта и базы данных на высоком уровне;
  • Избавиться от устаревшей информации, которая уже не актуальна;
  • Снизить нагрузку на сервер и ускорить запросы к базе данных;
  • Упростить администрирование и анализ текущих проблем.

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

Как реализовать автоматическое удаление старых тикетов в WordPress

Для удаления старых тикетов мы будем использовать WP-Cron — встроенную систему планировщика задач в WordPress. Допустим, у вас уже есть кастомный тип записи для тикетов — ticket. Мы будем удалять тикеты, которые не обновлялись более 90 дней.

Шаг 1. Создаем функцию для удаления тикетов

Добавьте следующий код в файл functions.php вашей темы или в отдельный плагин:

function wpticket_delete_old_tickets() {
    $args = array(
        'post_type'      => 'ticket',
        'post_status'    => 'publish',
        'date_query'     => array(
            array(
                'column' => 'post_modified_gmt',
                'before' => '90 days ago',
            ),
        ),
        'fields'         => 'ids',
        'posts_per_page' => -1,
    );

    $old_tickets = get_posts($args);

    if (!empty($old_tickets)) {
        foreach ($old_tickets as $ticket_id) {
            wp_delete_post($ticket_id, true); // true - принудительное удаление без корзины
        }
    }
}

Эта функция ищет все тикеты, которые не обновлялись последние 90 дней, и удаляет их без отправки в корзину.

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

Теперь нужно создать cron-задачу, которая будет запускать нашу функцию, например, раз в сутки.

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

add_action('wpticket_daily_delete_old_tickets', 'wpticket_delete_old_tickets');

Этот код проверяет, запланировано ли уже событие, и если нет — создает его на ежедневный запуск. При срабатывании события вызывается функция удаления старых тикетов.

Дополнительные советы по автоматизации и безопасности

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

  • Перед удалением создавать архив удаляемых тикетов, например, в формате CSV или JSON;
  • Добавить возможность настройки периода хранения тикетов через админку;
  • Убедиться, что удаляются только тикеты со статусом «Завершен» или «Закрыт», чтобы не потерять важные активные обращения.

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

function wpticket_export_old_tickets() {
    $args = array(
        'post_type'      => 'ticket',
        'post_status'    => 'publish',
        'date_query'     => array(
            array(
                'column' => 'post_modified_gmt',
                'before' => '90 days ago',
            ),
        ),
        'posts_per_page' => -1,
    );

    $old_tickets = get_posts($args);
    $export_data = array();

    foreach ($old_tickets as $ticket) {
        $export_data[] = array(
            'ID'      => $ticket->ID,
            'Title'   => $ticket->post_title,
            'Content' => $ticket->post_content,
            'Date'    => $ticket->post_date,
        );
    }

    // Пример вывода в JSON
    file_put_contents(WP_CONTENT_DIR . '/old-tickets-export.json', json_encode($export_data));
}

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

Если вы используете плагин для тикет-системы, например, Expert Review или WPRemark, проверьте в их настройках наличие автоматической очистки. Это существенно облегчит задачу.

Если такой функции нет, можно дополнить их собственным кодом, описанным выше, или обратиться к их API для удаления тикетов. Например, в Expert Review можно использовать их методы для получения и удаления тикетов программно.

Выводы и рекомендации

Автоматическое удаление старых тикетов — эффективный способ поддерживать базу данных WordPress в порядке и оптимизировать производительность сайта. Используйте WP-Cron для планирования задач, добавляйте резервное копирование и тщательно настраивайте условия удаления, чтобы не потерять важные данные.

Пример кода в статье поможет быстро внедрить такую функциональность, а использование готовых плагинов с поддержкой автоматизации упростит работу и расширит возможности вашей тикет-системы.

Как сделать автоматическую архивацию истории тикетов в WordPress
13.02.2026
Как добавить автотьюторные ответы в тикет-системе WordPress
04.03.2026
Как решить проблему замедленной работы AJAX в тикет-системе WordPress
01.03.2026
Как отладить и исправить проблемы с неработающими AJAX-запросами в тикет-системе WordPress
04.05.2026
Как создать автоматический отчет о проблемах в тикет-системе WordPress
26.02.2026