Диагностика проблемы: зачем и когда нужна автоматическая очистка данных
Contact Form 7 по умолчанию не сохраняет отправленные данные в базе, однако многие сайты используют дополнения для логирования заявок (например, Flamingo) или кастомные решения на основе хуков. Со временем накопление таких данных приводит к увеличению базы, замедлению запросов и росту нагрузки на сервер. Поэтому важно настроить автоматическую очистку устаревших записей и логов.
Как определить необходимость очистки данных
- Проверить размер таблиц базы данных, где хранятся данные форм (например,
wp_flamingo_inbound). - Оценить скорость работы административной панели при просмотре логов.
- Посмотреть, есть ли в базе данные старше 30-60 дней, которые уже не нужны.
Пошаговое решение: автоматическая очистка данных Flamingo и кастомных логов
Рассмотрим пример с популярным плагином Flamingo, а также общий подход для кастомных таблиц.
1. Очистка записей Flamingo с помощью WP-Cron
Flamingo сохраняет данные в таблице wp_flamingo_inbound. Для удаления записей старше 30 дней используем WP-Cron и SQL-запрос.
function cf7_delete_old_flamingo_messages() {
global $wpdb;
$table = $wpdb->prefix . 'flamingo_inbound';
$days = 30;
$date_limit = date('Y-m-d H:i:s', strtotime("-{$days} days"));
$wpdb->query(
$wpdb->prepare(
"DELETE FROM $table WHERE submit_time < %s",
$date_limit
)
);
}
function cf7_schedule_flamingo_cleanup() {
if ( ! wp_next_scheduled( 'cf7_flamingo_cleanup_event' ) ) {
wp_schedule_event( time(), 'daily', 'cf7_flamingo_cleanup_event' );
}
}
add_action( 'wp', 'cf7_schedule_flamingo_cleanup' );
add_action( 'cf7_flamingo_cleanup_event', 'cf7_delete_old_flamingo_messages' );
2. Очистка кастомных логов на основе пользовательских таблиц
Если вы сохраняете данные формы в своей таблице, например wp_custom_cf7_logs с колонкой created_at, используйте аналогичный подход:
function cf7_delete_old_custom_logs() {
global $wpdb;
$table = $wpdb->prefix . 'custom_cf7_logs';
$days = 30;
$date_limit = date('Y-m-d H:i:s', strtotime("-{$days} days"));
$wpdb->query(
$wpdb->prepare(
"DELETE FROM $table WHERE created_at < %s",
$date_limit
)
);
}
add_action( 'cf7_custom_logs_cleanup_event', 'cf7_delete_old_custom_logs' );
function cf7_schedule_custom_logs_cleanup() {
if ( ! wp_next_scheduled( 'cf7_custom_logs_cleanup_event' ) ) {
wp_schedule_event( time(), 'daily', 'cf7_custom_logs_cleanup_event' );
}
}
add_action( 'wp', 'cf7_schedule_custom_logs_cleanup' );
Проверка результата после внедрения
- Подождите 24 часа после внедрения WP-Cron задач или запустите задачу вручную через WP-CLI:
wp cron event run cf7_flamingo_cleanup_event
wp cron event run cf7_custom_logs_cleanup_event
- Проверьте количество записей в таблицах базы данных до и после запуска.
- В административной панели Flamingo или кастомном интерфейсе убедитесь, что старые записи удалены.
- Отслеживайте производительность сайта, чтобы убедиться в улучшении скорости.
Частые ошибки и как их исправлять
- WP-Cron не срабатывает — часто связано с недостаточным трафиком сайта или отключенным WP-Cron. Решение: настроить системный cron на сервере или запускать WP-Cron вручную.
- Неверное имя таблицы — используйте
$wpdb->prefixдля корректного определения префикса базы. - Отсутствие индексации в колонках даты — замедляет удаление. Добавьте индекс в колонку даты для ускорения запросов.
- Удаление нужных записей — всегда делайте резервные копии базы перед настройкой автоматической очистки.
Практические советы по безопасности и производительности
- Проверяйте и ограничивайте права пользователя базы данных, который выполняет удаление.
- Используйте транзакции и логи для отслеживания автоматических удалений.
- Старайтесь не удалять слишком часто — оптимально раз в сутки с удалением данных старше 30 дней.
- Для больших баз используйте пакетную очистку по частям с помощью
LIMIT.
Сравнительная таблица подходов к очистке данных
| Метод | Плюсы | Минусы | Когда использовать |
|---|---|---|---|
| WP-Cron с SQL-запросом | Просто реализовать, встроено в WP | Зависит от посещаемости сайта, возможны задержки | Сайты со средним трафиком, небольшие базы |
| Системный cron + WP-CLI | Надежно, не зависит от трафика | Требует доступа к серверу | Большие базы, высоконагруженные сайты |
| Плагины для очистки данных | Удобство и настройки в UI | Дополнительная нагрузка, возможные конфликты | Для пользователей без навыков кодинга |