Диагностика проблемы с устаревшими отзывами в WooCommerce
Магазины на WooCommerce часто сталкиваются с накоплением большого количества отзывов. Старые отзывы могут быть неактуальны, снижать доверие к товару или занимать место в базе данных, замедляя сайт. Встроенных инструментов для автоматического удаления старых отзывов по дате в WooCommerce нет, поэтому требуется кастомное решение.
Пошаговое решение: автоматическое удаление отзывов по дате
1. Выбор критерия удаления
Чаще всего отзывы удаляют, если они старше определённого периода (например, 1 год). Для этого нужно сравнивать дату публикации комментария с текущей датой.
2. Написание PHP-функции для удаления
Создадим функцию, которая будет находить и удалять отзывы, старше заданного количества дней. В WooCommerce отзывы — это комментарии к товарам с типом comment_type = 'review'.
function wc_delete_old_reviews( $days = 365 ) {
global $wpdb;
$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
Чтобы удаление происходило регулярно, зарегистрируем задачу WP-Cron. Например, ежедневный запуск.
function wc_schedule_review_deletion() {
if ( ! wp_next_scheduled( 'wc_daily_review_deletion' ) ) {
wp_schedule_event( time(), 'daily', 'wc_daily_review_deletion' );
}
}
add_action( 'wp', 'wc_schedule_review_deletion' );
add_action( 'wc_daily_review_deletion', function() {
wc_delete_old_reviews( 365 ); // удаляем отзывы старше 365 дней
});Как проверить, что автоматическое удаление отзывов работает
- Создайте тестовый отзыв с датой более 365 дней назад (можно вручную в базе данных или через плагин для редактирования комментариев).
- Запустите функцию вручную, вызвав
wc_delete_old_reviews(365);из консоли WP-CLI или временно в коде. - Проверьте в админке WooCommerce, что старый отзыв удалился.
- Проверьте логи сервера или добавьте
error_logв функцию для отслеживания удаления.
Частые ошибки и способы их устранения
- Отзывы не удаляются: возможно, задача WP-Cron не срабатывает. Проверьте с помощью плагина WP Crontrol, есть ли запланированное событие
wc_daily_review_deletion. - Функция удаляет не все старые отзывы: проверьте правильность даты и формат даты в базе. Убедитесь, что комментарии действительно имеют
comment_type = 'review'. - Ошибка доступа при удалении: убедитесь, что у PHP достаточно прав для удаления комментариев, что нет конфликтов с плагинами безопасности.
Практические советы по безопасности и производительности
- Удаление большого количества отзывов за один раз может нагрузить базу. Можно оптимизировать функцию, удаляя отзывы порциями, например по 100 штук за раз.
- Для безопасности оборачивайте вызов функции в проверки прав администратора, если вызываете вручную.
- Резервное копирование базы перед включением автоматического удаления – обязательное условие.
- Для контроля добавьте логирование удалённых комментариев в отдельный файл или в системный лог.
Сравнение вариантов реализации автоматического удаления отзывов
| Метод | Плюсы | Минусы |
|---|---|---|
| Ручное удаление через админку | Простота, полный контроль | Затратно по времени, риски пропуска |
| Плагин для очистки комментариев | Удобство, графический интерфейс | Зависимость от стороннего кода, нагрузка на сайт |
| Кастомный код с WP-Cron (наш вариант) | Автоматизация, гибкость, без сторонних плагинов | Требует навыков, настройка WP-Cron |