Диагностика проблемы: зачем удалять данные и логи Contact Form 7
Contact Form 7 по умолчанию не сохраняет отправленные данные формы в базе данных, но если вы используете дополнительные плагины для записи отправок (например, Flamingo или сторонние интеграции), или если на вашем сайте ведутся логи, то их накопление может привести к росту размера базы и замедлению работы сайта. Автоматическое удаление старых записей решает проблему переполнения и помогает поддерживать производительность.
Проверяем, есть ли логи и где они хранятся
1. Если установлен плагин Flamingo, записи хранятся в таблицах wp_flamingo_inbound и wp_flamingo_contact.
2. Если вы храните логи с помощью кастомных решений, выясните, в каких таблицах или файлах они находятся.
Для проверки можно использовать phpMyAdmin или аналогичный инструмент, выполнив запрос:
SELECT COUNT(*) FROM wp_flamingo_inbound;Если количество записей большое (например, более 10 000), это повод задуматься об автоматической очистке.
Пошаговое решение: как настроить автоматическое удаление данных и логов
1. Очистка записей Flamingo через WP-Cron
Добавьте следующий код в файл functions.php вашей темы или в отдельный плагин:
function cf7_delete_old_flamingo_records() {
global $wpdb;
$days_to_keep = 30; // Хранить данные 30 дней
$date_threshold = date('Y-m-d H:i:s', strtotime("-{$days_to_keep} days"));
// Удаляем старые записи из wp_flamingo_inbound
$wpdb->query($wpdb->prepare(
"DELETE FROM {$wpdb->prefix}flamingo_inbound WHERE submit_time < %s",
$date_threshold
));
// Удаляем старые контакты, не привязанные к актуальным сообщениям
$wpdb->query($wpdb->prepare(
"DELETE FROM {$wpdb->prefix}flamingo_contact WHERE created < %s",
$date_threshold
));
}
// Добавляем событие в WP-Cron
if (!wp_next_scheduled('cf7_daily_cleanup')) {
wp_schedule_event(time(), 'daily', 'cf7_daily_cleanup');
}
add_action('cf7_daily_cleanup', 'cf7_delete_old_flamingo_records');Этот код запускает очистку один раз в сутки, удаляя записи старше 30 дней.
2. Очистка кастомных логов Contact Form 7
Если вы ведёте логи через пользовательские таблицы или файлы, настройте аналогичный WP-Cron с функцией, которая удалит старые записи или файлы. Пример удаления файлов логов старше 7 дней:
function cf7_delete_old_log_files() {
$log_dir = WP_CONTENT_DIR . '/cf7-logs/';
$files = glob($log_dir . '*.log');
$now = time();
$days_to_keep = 7;
foreach ($files as $file) {
if (is_file($file)) {
if ($now - filemtime($file) > 60 * 60 * 24 * $days_to_keep) {
unlink($file);
}
}
}
}
if (!wp_next_scheduled('cf7_logfile_cleanup')) {
wp_schedule_event(time(), 'daily', 'cf7_logfile_cleanup');
}
add_action('cf7_logfile_cleanup', 'cf7_delete_old_log_files');Проверка результата после внедрения
Для проверки работы скрипта:
- В зависимости от задачи, проверьте количество записей в таблицах Flamingo до и после выполнения WP-Cron (
wp cron event run cf7_daily_cleanupиз консоли или имитация Cron через wp-cli). - Проверьте наличие файлов логов в папке
wp-content/cf7-logs/и убедитесь, что старые файлы удалены. - Для отладки можно добавить
error_logв функции очистки, чтобы увидеть, когда они выполняются.
Частые ошибки и как их исправить
- Ошибка: WP-Cron не срабатывает — проверьте, что на сайте активирован WP-Cron и нет ограничений по вызову событий. В продакшене рекомендуется настроить системный cron для вызова
wp-cron.php. - Ошибка: Неверные префиксы таблиц — убедитесь, что используете глобальную переменную
$wpdb->prefix, а не жестко прописанныйwp_. - Ошибка: Удаление не происходит — проверьте права на папку с логами и корректность путей.
- Ошибка: Потеря важных данных — убедитесь, что в настройках период хранения установлен адекватно и вы делаете резервные копии перед очисткой.
Практические советы по безопасности и производительности
- Перед внедрением очистки создайте резервные копии базы и файлов.
- Используйте WP-Cron с осторожностью, на больших сайтах лучше настроить системный cron для стабильности.
- Если у вас много данных, разбивайте удаление на порции (batch processing), чтобы избежать перегрузки сервера и таймаутов.
- Не сохраняйте в логах личные данные без шифрования, чтобы соблюдать GDPR и другие требования безопасности.
- Регулярно проверяйте размер таблиц и папок с логами.
Сравнение вариантов удаления данных
| Метод | Требования | Преимущества | Недостатки |
|---|---|---|---|
| Ручная очистка через phpMyAdmin | Доступ к БД | Полный контроль | Риск ошибок, требует времени |
| WP-Cron с кастомным кодом | Знания PHP, работающий WP-Cron | Автоматизация, гибкость | Зависит от WP-Cron, возможны таймауты |
| Плагины для логирования с функцией очистки | Установка плагина | Удобство, готовые решения | Большая нагрузка, меньше контроля |