Диагностика проблемы: зачем и когда нужны автоматические удаления отзывов в WooCommerce
Владельцы магазинов на WooCommerce часто сталкиваются с необходимостью управления отзывами. Например, отзывы могут устаревать, терять актуальность или нарушать правила площадки. Ручное удаление отзывов — трудоёмкий и ошибкоопасный процесс, особенно если отзывов много. Автоматизация удаления отзывов по сроку поможет держать магазин в актуальном состоянии и снизить нагрузку на администраторов.
Пошаговое решение: как настроить удаление отзывов старше N дней
1. Определяем срок удаления
Для примера возьмём удаление отзывов, которые старше 180 дней. Значение можно изменить под свои нужды.
2. Создаём функцию для удаления устаревших отзывов
Добавьте следующий код в файл functions.php вашей дочерней темы или в отдельный плагин:
function wpstuff_delete_old_reviews() {
global $wpdb;
$days = 180; // срок в днях
$date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));
// Получаем ID комментариев (отзывов), которые старше даты
$old_reviews = $wpdb->get_col($wpdb->prepare(
"SELECT comment_ID FROM {$wpdb->comments}
WHERE comment_type = 'review'
AND comment_date < %s",
$date_threshold
));
if (!empty($old_reviews)) {
foreach ($old_reviews as $comment_id) {
wp_delete_comment($comment_id, true); // true — полное удаление
}
}
}3. Добавляем крон-задачу для регулярного запуска
Чтобы функция запускалась автоматически (например, раз в сутки), используем WP-Cron:
if (!wp_next_scheduled('wpstuff_daily_delete_old_reviews')) {
wp_schedule_event(time(), 'daily', 'wpstuff_daily_delete_old_reviews');
}
add_action('wpstuff_daily_delete_old_reviews', 'wpstuff_delete_old_reviews');4. Очистка расписания при деактивации (если создан плагин)
Чтобы при отключении плагина не оставался запланированный хук, добавьте:
function wpstuff_deactivate_plugin() {
$timestamp = wp_next_scheduled('wpstuff_daily_delete_old_reviews');
if ($timestamp) {
wp_unschedule_event($timestamp, 'wpstuff_daily_delete_old_reviews');
}
}
register_deactivation_hook(__FILE__, 'wpstuff_deactivate_plugin');Как проверить, что автоматическое удаление работает
- Проверьте в базе данных таблицу
wp_commentsналичие отзывов старше 180 дней (comment_type = 'review'). - После запуска крона (можно вручную вызвать функцию
wpstuff_delete_old_reviews()через консоль WP-CLI или временно добавить вызов вfunctions.php) убедитесь, что соответствующие отзывы удалены. - Просмотрите раздел отзывов в админке WooCommerce — устаревшие отзывы должны исчезнуть.
- Логи сервера или плагина Debug Bar помогут отследить выполнение функции.
Частые ошибки и как их исправить
- Отзывы не удаляются: проверьте, что комментарии действительно имеют
comment_type = 'review'. Если отзывы имеют другой тип (например, пустое поле), исправьте условиеWHERE comment_type = 'review'наcomment_type = ''или уберите фильтр. - Крон-задача не запускается: WP-Cron зависит от посещаемости сайта. Для теста вызовите функцию вручную или настройте системный cron для вызова
wp-cron.php. - Удаляются не те отзывы: убедитесь, что дата сравнивается с полем
comment_dateи формат даты совпадает. - Ошибка при вызове
wp_delete_comment: проверьте, что функция вызывается в правильном контексте, без конфликтов с другими плагинами.
Практические советы по безопасности и производительности
- Используйте транзишены или опции для кэширования результата запроса, если отзывов очень много, чтобы не создавать нагрузку на базу при каждом запуске.
- Ограничьте удаление пакетами по 50–100 отзывов за раз, чтобы избежать таймаутов.
- Включите логирование удаления для аудита и отката в случае ошибок.
- Для крупных магазинов рассмотрите выполнение удалений через WP-CLI команду, вызываемую по cron, чтобы снизить нагрузку на HTTP-запросы.
- Проверяйте права пользователя и контексты выполнения, чтобы избежать удаления отзывов неавторизованными процессами.
Альтернативные способы и сравнение
| Метод | Плюсы | Минусы |
|---|---|---|
| Собственный код с WP-Cron | Гибкость, контроль, отсутствие лишних плагинов | Нужно писать и тестировать, возможны ошибки в коде |
| Плагин для очистки комментариев (например, WP-Optimize) | Простота установки, поддержка интерфейса | Менее гибкие настройки по срокам, дополнительная нагрузка |
| Удаление вручную через админку | Простота, не требует знаний кода | Трудоёмко, риск пропуска отзывов, нет автоматизации |