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