Диагностика проблемы: зачем удалять отзывы автоматически?
В WooCommerce отзывы покупателей помогают формировать доверие к товарам. Однако иногда необходимо удалять старые отзывы, например, если они устарели, релевантность снизилась или политика магазина требует обновления отзывов. Ручное удаление отзывов занимает время и неэффективно при большом количестве товаров.
Автоматизация удаления отзывов по времени — практическое решение для поддержки актуальности отзывов на сайте.
Как реализовать автоматическое удаление отзывов через 30 дней
1. Использование WP-Cron для планирования задачи
WordPress имеет встроенный планировщик заданий — WP-Cron. Для удаления отзывов старше 30 дней создадим функцию и запланируем её запуск раз в сутки.
function wpnote_schedule_delete_old_reviews() {
if ( ! wp_next_scheduled( 'wpnote_delete_old_reviews_hook' ) ) {
wp_schedule_event( time(), 'daily', 'wpnote_delete_old_reviews_hook' );
}
}
add_action( 'wp', 'wpnote_schedule_delete_old_reviews' );
add_action( 'wpnote_delete_old_reviews_hook', 'wpnote_delete_old_reviews' );
function wpnote_delete_old_reviews() {
global $wpdb;
$days = 30;
$date_threshold = date( 'Y-m-d H:i:s', strtotime( "-{$days} days" ) );
// Получаем ID комментариев (отзывов) старше 30 дней
$old_reviews = $wpdb->get_col( $wpdb->prepare(
"SELECT comment_ID FROM {$wpdb->comments} WHERE comment_date < %s AND comment_type = 'review'",
$date_threshold
) );
if ( ! empty( $old_reviews ) ) {
foreach ( $old_reviews as $comment_id ) {
wp_delete_comment( $comment_id, true ); // true — принудительно удаляет
}
}
}
2. Особенности работы с отзывами WooCommerce
По умолчанию WooCommerce использует тип комментария review для отзывов. Важно фильтровать именно их, чтобы не удалять обычные комментарии к записям.
Если вы используете кастомные решения для отзывов, проверьте тип комментария в базе данных и корректируйте запрос.
Проверка результата после внедрения
Для проверки работы скрипта:
- Добавьте тестовый отзыв с датой старше 30 дней (можно вручную в базе данных или через админку, изменив дату комментария).
- Запустите WP-Cron вручную, например, с помощью плагина WP Crontrol или через WP-CLI команду:
wp cron event run wpnote_delete_old_reviews_hook
- Проверьте, что комментарий удалён из списка отзывов в админке WooCommerce.
Частые ошибки и как их исправить
- Отзывы не удаляются: проверьте, что WP-Cron работает корректно. На локальном сервере cron может не запускаться без внешних запросов — используйте системный cron или WP-CLI.
- Удаляются не только отзывы: убедитесь, что в SQL-запросе указан правильный тип комментария
comment_type = 'review'. - Отзывы не идентифицируются как отзывы: если тема или плагин изменяет тип комментариев, исправьте фильтр или используйте мета-запрос для идентификации.
- Производительность падает на больших магазинах: используйте пакетную обработку (например, удалять по 100 отзывов за раз) и оптимизируйте запросы.
Практические советы по безопасности и производительности
- Резервное копирование базы данных перед внедрением автоматического удаления — обязательно.
- Логирование удалений — добавьте запись в лог файл или в отдельную таблицу для аудита действий.
- Пакетная обработка — для магазинов с тысячами отзывов применяйте лимит и делайте несколько проходов, чтобы избежать таймаутов.
- Использование системного Cron вместо WP-Cron — более надёжно для регулярных задач, особенно на больших сайтах.
Чек-лист для внедрения автоматического удаления отзывов
- Проверьте, что отзывы WooCommerce имеют тип комментария
review. - Добавьте код планировщика и функции удаления в файл
functions.phpили в отдельный плагин. - Настройте запуск cron задачи (WP-Cron или системный cron).
- Протестируйте работу на тестовой базе с отзывами старше 30 дней.
- Добавьте логирование для контроля удалений.
- Мониторьте производительность и корректность работы после запуска.
Альтернативы: плагины и код — сравнение
| Решение | Плюсы | Минусы |
|---|---|---|
| Самописный код (как в статье) | Полный контроль, бесплатно, легко модифицировать | Требует навыков, нужно следить за WP-Cron |
| Плагин для управления отзывами (например, WP Review) | Простая настройка, дополнительные функции анализа | Может нагружать сайт, ограничена кастомизация |
| Использование внешних сервисов и интеграций | Автоматизация, аналитика, поддержка | Плата за сервис, зависимость от сторонних решений |