Как автоматически удалять старые отзывы в WooCommerce

В чем заключается задача удаления старых отзывов в WooCommerce

Интернет-магазины на WooCommerce часто накапливают большое количество отзывов, включая устаревшие или нерелевантные. Иногда требуется автоматически удалять отзывы старше определенного периода, чтобы поддерживать актуальность контента и улучшить пользовательский опыт.

Диагностика проблемы: как понять, что нужны автоматические удаления

Если вы заметили, что в разделе с отзывами много старых сообщений (например, старше 2 лет), которые не несут пользы, а лишь загромождают интерфейс и снижают доверие покупателей, стоит рассмотреть автоматическое удаление. Ручное удаление отзывов в большом объеме — непрактично и занимает много времени.

Пошаговое решение: автоматическое удаление отзывов по дате

1. Создаем функцию для удаления отзывов старше заданного срока

function delete_old_woocommerce_reviews() {
    // Период в днях, после которого отзывы считаются устаревшими
    $days = 365 * 2; // 2 года
    $date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));

    global $wpdb;
    // Получаем ID комментариев (отзывов), дата которых меньше порога и тип 'review'
    $reviews_to_delete = $wpdb->get_col($wpdb->prepare(
        "SELECT comment_ID FROM {$wpdb->comments} WHERE comment_type = 'review' AND comment_date < %s",
        $date_threshold
    ));

    if (!empty($reviews_to_delete)) {
        foreach ($reviews_to_delete as $comment_id) {
            wp_delete_comment($comment_id, true); // true - навсегда
        }
    }
}

2. Добавляем задачу в планировщик WP-Cron для регулярного удаления

// Регистрируем событие при активации темы или плагина
function schedule_old_reviews_deletion() {
    if (!wp_next_scheduled('delete_old_reviews_daily_event')) {
        wp_schedule_event(time(), 'daily', 'delete_old_reviews_daily_event');
    }
}
add_action('wp', 'schedule_old_reviews_deletion');

// Привязываем нашу функцию к событию
add_action('delete_old_reviews_daily_event', 'delete_old_woocommerce_reviews');

// Для отмены расписания при деактивации
function unschedule_old_reviews_deletion() {
    $timestamp = wp_next_scheduled('delete_old_reviews_daily_event');
    if ($timestamp) {
        wp_unschedule_event($timestamp, 'delete_old_reviews_daily_event');
    }
}

3. Ручной запуск для тестирования

Для проверки можно временно вызвать функцию напрямую, например, в functions.php или через плагин Code Snippets:

delete_old_woocommerce_reviews();

Как проверить, что удаление отзывов сработало

  • Зайдите в админку WordPress → Комментарии → Отзывы.
  • Отфильтруйте отзывы по дате, чтобы убедиться, что отзывы старше 2 лет отсутствуют.
  • В базе данных (через phpMyAdmin) выполните запрос SELECT COUNT(*) FROM wp_comments WHERE comment_type = 'review' AND comment_date < 'YYYY-MM-DD' для даты порога.
  • При ручном запуске функции убедитесь, что отзывы удаляются немедленно.

Частые ошибки и как их исправить

  • Не удаляются отзывы: Проверьте, что комментарии действительно имеют тип review. WooCommerce использует именно этот тип для отзывов.
  • Функция не запускается по расписанию: Убедитесь, что WP-Cron работает (нет проблем с вызовами wp-cron.php на сервере). Можно вручную вызвать wp-cron через браузер.
  • Удаление происходит не полностью: Проверьте, что нет сторонних плагинов, связанных с отзывами, которые изменяют типы или структуру комментариев.
  • Ошибка прав доступа: Функция wp_delete_comment требует прав администратора, запускайте ее в контексте, где есть нужные права, или используйте wp-cli.

Практические советы по безопасности и производительности

  • Для больших баз данных лучше не удалять все отзывы за один проход, а разбивать удаление на части (например, по 100 отзывов за раз), чтобы избежать таймаутов.
  • Добавьте логирование удалений в файл, чтобы отслеживать, когда и какие отзывы удаляются.
  • Для надежности создайте резервную копию базы перед внедрением автоматического удаления.
  • Если у вас есть плагин Clearfy Pro с https://wpshop.ru/plugins/clearfy?source=wptemy.ru&medium=article&campaign=kak-avtomaticheski-udalit-starye-otzyvy-woocommerce, можно использовать его инструменты для оптимизации базы данных и дополнительно контролировать отзывы.

Сравнение вариантов удаления старых отзывов

МетодПлюсыМинусы
Ручное удаление через админкуПростота, контрольТрудоемко, не подходит для большого объема
Код с WP-Cron (предложенный способ)Автоматизация, гибкость, без сторонних плагиновТребует базовых навыков разработки, возможно нужно тестировать производительность
Плагины для очистки базыУдобство, дополнительные функцииЗависимость от сторонних решений, возможны конфликты
Как сделать автоматическое создание резервных копий в WordPress
08.03.2026
Как оптимизировать загрузку шаблонов WordPress
17.03.2026
Как удалить класс WooCommerce из HTML элементов без плагинов
16.06.2026
Как удалить временные таблицы базы данных WordPress без потери данных
13.06.2026
Как избежать проблем с дубликатами контента в WordPress без плагинов
30.06.2026