Диагностика проблемы: зачем и когда нужно удалять отзывы автоматически
В WooCommerce отзывы играют важную роль для повышения доверия покупателей, но со временем некоторые отзывы могут стать нерелевантными или устаревшими. Например, отзывы о сезонных товарах, которые были актуальны год назад, могут вводить в заблуждение новых клиентов. В таких случаях возникает задача автоматического удаления отзывов после определённого срока — например, через 6 месяцев или год после публикации.
Без автоматизации это требует постоянного ручного контроля, что неэффективно при большом количестве отзывов. Поэтому рассмотрим, как автоматизировать процесс удаления отзывов в WooCommerce на уровне кода.
Как определить, что отзывы WooCommerce — это комментарии типа «review»
В WooCommerce отзывы — это комментарии с типом comment_type = 'review'. Это важно для фильтрации и адресного удаления именно отзывов, а не обычных комментариев.
Для проверки типа комментария можно использовать SQL-запрос или WP_Query:
$args = [
'post_type' => 'product',
'status' => 'approve',
'type' => 'review',
'date_query' => [
'before' => '6 months ago'
],
];
$comments = get_comments($args);
Пошаговое решение: автоматическое удаление отзывов через WP-Cron
1. Создаём функцию удаления старых отзывов
В коде темы или в собственном плагине добавьте функцию, которая будет искать отзывы старше N дней и удалять их:
function wpstuff_delete_old_woocommerce_reviews() {
$days = 180; // количество дней, после которых отзывы удаляются
$date_threshold = date('Y-m-d H:i:s', strtotime("-{$days} days"));
$old_reviews = get_comments([
'post_type' => 'product',
'status' => 'approve',
'type' => 'review',
'date_query' => [
'before' => $date_threshold
],
'fields' => 'ids',
'number' => 1000 // лимит за один заход
]);
foreach ($old_reviews as $comment_id) {
wp_delete_comment($comment_id, true); // true - принудительное удаление
}
}2. Регистрируем событие WP-Cron для регулярного запуска
Добавьте в functions.php или плагин следующий код для регистрации задачи:
if (!wp_next_scheduled('wpstuff_delete_old_reviews_cron')) {
wp_schedule_event(time(), 'daily', 'wpstuff_delete_old_reviews_cron');
}
add_action('wpstuff_delete_old_reviews_cron', 'wpstuff_delete_old_woocommerce_reviews');3. Удаляем событие при деактивации плагина или темы
function wpstuff_deactivate_cleanup() {
$timestamp = wp_next_scheduled('wpstuff_delete_old_reviews_cron');
if ($timestamp) {
wp_unschedule_event($timestamp, 'wpstuff_delete_old_reviews_cron');
}
}
register_deactivation_hook(__FILE__, 'wpstuff_deactivate_cleanup');Проверка результата после внедрения
- Подождите 24 часа после активации крона или вручную запустите событие через WP-CLI:
wp cron event run wpstuff_delete_old_reviews_cron - Проверьте в админке WooCommerce — раздел «Отзывы»: отзывы старше 180 дней должны быть удалены.
- Для отладки можно добавить
error_logв функцию удаления, чтобы видеть вdebug.logудалённые ID комментариев.
Частые ошибки и способы их исправления
- Отсутствие cron-события. Проверьте, что WP-Cron не отключен в
wp-config.php(не должно бытьdefine('DISABLE_WP_CRON', true);). - Отзывы не удаляются. Убедитесь, что комментарии имеют тип
reviewи что дата фильтрации работает корректно (проверьте формат даты). - Удаление не происходит сразу. WP-Cron запускается при посещении сайта, можно принудительно выполнить через WP-CLI или плагин WP Crontrol.
- Потеря данных. Функция использует
wp_delete_commentс принудительным удалением, будьте осторожны и делайте бэкап перед внедрением.
Практические советы по безопасности и производительности
- Ограничивайте количество удаляемых отзывов за один проход (например, 1000), чтобы не перегружать сервер.
- Используйте Clearfy Pro или аналогичные плагины для оптимизации WP-Cron и управления автозапусками.
- Перед удалением создавайте резервные копии базы данных или экспортируйте отзывы для восстановления при необходимости.
- Для сайтов с большим трафиком используйте системный cron вместо WP-Cron для более точного и надёжного запуска задач.
Сравнение методов автоматического удаления отзывов
| Метод | Описание | Плюсы | Минусы |
|---|---|---|---|
| WP-Cron с кастомной функцией | Автоматическое удаление отзывов через код | Гибкость, контроль, бесплатно | Зависит от посещаемости сайта, возможны задержки |
| Плагины для управления отзывами | Управление отзывами с интерфейсом | Удобство, дополнительные функции модерации | Может быть платным, лишний функционал |
| Системный Cron + WP-CLI | Запуск WP-CLI скриптов через системный cron | Надёжность, точность запуска | Требует доступа к серверу, знание SSH |