WooCommerce: автоматическое удаление отзывов о товарах через заданный срок

|

Диагностика задачи: зачем удалять отзывы автоматически

В интернет-магазинах на WooCommerce отзывы играют важную роль, но иногда появляется необходимость удалять устаревшие или нерелевантные отзывы автоматически. Например, для товаров с сезонным спросом или акциями, где старые отзывы могут вводить в заблуждение покупателей. В стандартном функционале WooCommerce и WordPress нет автоматического удаления отзывов по времени, это нужно реализовывать вручную либо через кастомный код.

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

1. Определяем, что такое отзыв в WooCommerce

Отзывы в WooCommerce — это комментарии к типу записи product с определённым мета-данным, содержащим рейтинг. Поэтому работать будем с комментариями WordPress, отфильтрованными по типу записи.

2. Пишем функцию для удаления старых отзывов

Ниже пример функции, которая удаляет отзывы старше заданного количества дней (например, 90):

function wpreboot_delete_old_woocommerce_reviews() {
    global $wpdb;
    $days = 90; // количество дней
    $date_threshold = date('Y-m-d H:i:s', strtotime("-{$days} days"));

    $comments_to_delete = $wpdb->get_col(
        $wpdb->prepare(
            "SELECT c.comment_ID FROM {$wpdb->comments} c
             INNER JOIN {$wpdb->posts} p ON c.comment_post_ID = p.ID
             WHERE p.post_type = 'product'
             AND c.comment_date < %s
             AND c.comment_approved = 1
             AND c.comment_type = ''",
             $date_threshold
        )
    );

    if (!empty($comments_to_delete)) {
        foreach ($comments_to_delete as $comment_id) {
            wp_delete_comment($comment_id, true); // true — принудительное удаление
        }
    }
}

3. Запускаем функцию автоматически по расписанию (WP-Cron)

Лучше запускать её раз в сутки, чтобы не нагружать сервер. Добавим хук и расписание:

add_action('wpreboot_daily_delete_reviews', 'wpreboot_delete_old_woocommerce_reviews');

if (!wp_next_scheduled('wpreboot_daily_delete_reviews')) {
    wp_schedule_event(time(), 'daily', 'wpreboot_daily_delete_reviews');
}

4. Отключение задачи при удалении плагина или темы

Чтобы избежать мусора, добавим отмену cron при деактивации (например, в плагине):

function wpreboot_deactivate_cron() {
    $timestamp = wp_next_scheduled('wpreboot_daily_delete_reviews');
    if ($timestamp) {
        wp_unschedule_event($timestamp, 'wpreboot_daily_delete_reviews');
    }
}
register_deactivation_hook(__FILE__, 'wpreboot_deactivate_cron');

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

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

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

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

ВариантПлюсыМинусыКомпромисс
Ручное удаление через админкуПростота, контрольТрудозатратно, неавтоматичноПодойдёт для магазинов с небольшим количеством отзывов
Плагин с автоматическим удалениемАвтоматизация, простота настройкиМожет иметь лишние функции, нагрузкаВыбирать лёгкие и проверенные плагины
Кастомный код с WP-CronГибкость, нет лишних зависимостейТребует навыков, поддержка кодаОптимален для разработчиков и крупных проектов
Как использовать OmniVideo для автоматического видео-контента в WordPress
19.03.2026
Как разделить длинный пост на страницы в WordPress: пошаговое руководство
05.04.2026
Как использовать хуки для контроля корзины WooCommerce: практическое руководство
17.04.2026
Как удалить и заблокировать неиспользуемые посты в WordPress: практическое руководство
12.12.2025
WooCommerce: как автоматически удалять товар из корзины после оплаты
20.04.2026
×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше