Диагностика проблемы с неактивными отзывами в WooCommerce
В интернет-магазинах на WooCommerce отзывы играют важную роль для доверия и продаж. Однако часто накапливаются неактивные или спам-отзывы, которые не проходят модерацию или устарели. Это приводит к:
- Загромождению базы данных
- Ухудшению производительности сайта
- Потере доверия пользователей из-за спама
Если вы не удаляете такие отзывы вручную, со временем их количество может существенно вырасти. В стандартном интерфейсе WordPress нет готового инструмента для массового удаления неактивных отзывов по времени или статусу.
Пошаговое решение: удаление неактивных отзывов с помощью Cron и PHP
1. Определяем критерии неактивных отзывов
В WooCommerce отзывы — это комментарии к продуктам, у которых тип комментария comment_type равен review. Статусы комментариев:
approve— одобренныеhold— ожидающие модерацииspam— помеченные как спамtrash— удалённые
Для удаления подойдут отзывы в статусах hold и spam старше определённого срока, например, 30 дней.
2. Создаём функцию для удаления
Добавьте следующий код в файл functions.php вашей дочерней темы или в плагин для кастомных функций:
function wpzen_delete_old_inactive_reviews() {
global $wpdb;
$days = 30; // удалять отзывы старше 30 дней
$date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));
// Получаем ID отзывов (комментариев) с нужным статусом и типом
$comments_to_delete = $wpdb->get_col($wpdb->prepare(
"SELECT comment_ID FROM $wpdb->comments WHERE comment_type = %s AND comment_approved IN ('hold', 'spam') AND comment_date < %s",
'review',
$date_threshold
));
if (!empty($comments_to_delete)) {
foreach ($comments_to_delete as $comment_id) {
wp_delete_comment($comment_id, true); // true — полное удаление
}
}
}3. Настраиваем Cron задачу для автоматизации
WordPress использует собственный имитационный Cron — WP-Cron. Зарегистрируем событие, которое будет запускать функцию ежедневно.
// Регистрируем событие при активации темы/плагина
function wpzen_schedule_delete_reviews() {
if (!wp_next_scheduled('wpzen_daily_delete_reviews_event')) {
wp_schedule_event(time(), 'daily', 'wpzen_daily_delete_reviews_event');
}
}
add_action('wp', 'wpzen_schedule_delete_reviews');
// Привязываем нашу функцию к событию
add_action('wpzen_daily_delete_reviews_event', 'wpzen_delete_old_inactive_reviews');
// Очистка при деактивации темы/плагина
function wpzen_clear_scheduled_delete_reviews() {
$timestamp = wp_next_scheduled('wpzen_daily_delete_reviews_event');
if ($timestamp) {
wp_unschedule_event($timestamp, 'wpzen_daily_delete_reviews_event');
}
}Проверка результата после внедрения
- Подождите до следующего запуска WP-Cron (обычно при посещении сайта или запустите вручную через плагин WP Crontrol).
- Проверьте базу данных через phpMyAdmin или аналог — отзывы с
comment_approved«hold» или «spam», старше 30 дней, должны быть удалены. - В админке WordPress в разделе Отзывы убедитесь, что старые неактивные отзывы исчезли.
- Для отладки можно временно добавить логирование в функцию удаления, например, через
error_log().
Частые ошибки и как их исправить
- Функция не запускается автоматически: WP-Cron запускается только при посещениях сайта. Для проверки можно использовать плагин WP Crontrol и запускать событие вручную.
- Отзывы не удаляются: Проверьте, что тип комментария действительно
review. В WooCommerce это стандарт, но темы или плагины могут менять поведение. - Удаление происходит слишком часто или редко: Настройте интервал запуска Cron и параметр
$daysв функции удаления. Для частой очистки можно использовать интервалhourlyвместоdaily, но это увеличит нагрузку. - Ошибки прав доступа: Убедитесь, что PHP-скрипты имеют права на удаление комментариев и что нет конфликтов с плагинами безопасности.
Практические советы по безопасности и производительности
- Перед удалением делайте резервную копию базы данных.
- Не увеличивайте слишком часто интервал Cron, чтобы не создавать нагрузку на сервер.
- Если база данных очень большая, разбивайте удаление на части, например, удаляйте по 100 отзывов за раз.
- Используйте плагин Clearfy для дополнительной очистки и оптимизации базы.
Сравнение вариантов автоматического удаления отзывов
| Метод | Плюсы | Минусы | Компромисс |
|---|---|---|---|
| Ручное удаление через админку | Простота | Трудозатратно, риск пропуска | Подходит для небольших магазинов |
| Плагин для очистки отзывов | Автоматизация, удобство | Может влиять на производительность, требует обновлений | Используйте популярные и проверенные плагины |
| Кастомный PHP + Cron (как в статье) | Гибкость, точное управление | Требует навыков разработки, правильной настройки | Оптимально для опытных разработчиков |