Диагностика проблемы: зачем удалять старые отзывы в WooCommerce
Отзывы в WooCommerce помогают покупателям принимать решения, но с течением времени некоторые отзывы могут устаревать, терять актуальность или даже негативно влиять на восприятие товара. Особенно это актуально для магазинов с быстрым обновлением ассортимента или сезонными товарами. Ручное удаление отзывов — трудоёмкий процесс. Автоматизация удаления старых отзывов по дате поможет держать отзывы актуальными и улучшить качество пользовательского контента.
Пошаговое решение: автоматическое удаление отзывов старше N дней
1. Определение мета-данных и условий удаления
Отзывы в WooCommerce — это комментарии с типом comment_type = 'review' (или пустое значение для стандартных комментариев, если не подключены плагинами). По умолчанию WooCommerce использует обычные комментарии с типом review для отзывов. Важна дата создания комментария — comment_date.
2. Создание WP-Cron задачи для регулярной очистки
Для автоматизации используем WP-Cron, который будет запускать функцию удаления старых отзывов, например, раз в сутки.
if ( ! wp_next_scheduled( 'wpstuff_delete_old_reviews_daily' ) ) {
wp_schedule_event( time(), 'daily', 'wpstuff_delete_old_reviews_daily' );
}
add_action( 'wpstuff_delete_old_reviews_daily', 'wpstuff_delete_old_reviews' );
function wpstuff_delete_old_reviews() {
$days_to_keep = 180; // количество дней, после которых отзывы удаляются
global $wpdb;
$date_limit = date( 'Y-m-d H:i:s', strtotime( "-{$days_to_keep} days" ) );
// Получаем ID комментариев-отзывов старше указанной даты
$old_reviews = $wpdb->get_col( $wpdb->prepare(
"SELECT comment_ID FROM {$wpdb->comments} WHERE comment_type = 'review' AND comment_date < %s",
$date_limit
) );
if ( ! empty( $old_reviews ) ) {
foreach ( $old_reviews as $comment_id ) {
wp_delete_comment( $comment_id, true ); // true - удалять без возможности восстановления
}
}
}3. Добавление контроля через админку (опционально)
Для удобства можно добавить страницу настроек с выбором количества дней и кнопкой для ручного запуска очистки, но это выходит за рамки базового решения.
Проверка результата после внедрения
- Запустите функцию вручную для теста — вызовите
wpstuff_delete_old_reviews()через консоль WP-CLI или вставьте временно хук вinit. - Проверьте базу данных: отзывы старше заданного срока должны быть удалены.
- Проверьте раздел «Отзывы» в админке WooCommerce — старые отзывы отсутствуют.
- Убедитесь, что новые отзывы остаются нетронутыми.
Частые ошибки и как их исправить
- Отзывы не удаляются: Проверьте, что комментарии имеют
comment_type = 'review'. Иногда плагины могут использовать другой тип или не использовать тип вовсе. - Функция не запускается автоматически: Убедитесь, что WP-Cron активен и посещаемость сайта достаточна для его срабатывания. Для теста можно использовать плагин WP Crontrol.
- Удаление отзывов приводит к ошибкам: Проверьте права пользователя, под которым выполняется скрипт, и корректность вызова
wp_delete_comment.
Практические советы по безопасности и производительности
- Используйте пакетное удаление, чтобы не перегружать сервер при большом количестве отзывов. Например, удаляйте по 50 штук за раз.
- Добавьте логирование удалённых отзывов для аудита.
- Перед удалением можно отправлять уведомления администратору.
- Для больших баз данных используйте WP-CLI для запуска очистки, это надёжнее и быстрее.
Сравнение методов удаления отзывов
| Метод | Плюсы | Минусы |
|---|---|---|
| WP-Cron с кастомной функцией | Гибко, бесплатно, можно кастомизировать | Зависит от посещаемости сайта, требует навыков |
| Плагины для очистки комментариев (например, WP Bulk Delete) | Удобный интерфейс, дополнительные фильтры | Может быть избыточно, нагрузка при больших объёмах |
| Ручное удаление через админку | Просто без кода | Неавтоматично, трудозатратно |