Автоматическое удаление старых тикетов — важная задача для поддержания базы данных тикет-системы в 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 для планирования задач, добавляйте резервное копирование и тщательно настраивайте условия удаления, чтобы не потерять важные данные.
Пример кода в статье поможет быстро внедрить такую функциональность, а использование готовых плагинов с поддержкой автоматизации упростит работу и расширит возможности вашей тикет-системы.