Как автоматически удалять старые отзывы в 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
02.03.2026
Как сделать динамические заголовки H1 в WordPress
25.02.2026
Как использовать хук pre_get_posts для фильтрации товаров в WooCommerce
21.01.2026
Как использовать WPRemark для отзывов в WordPress
15.01.2026
Как удалить старшее изображение при загрузке в WordPress
16.05.2026