WooCommerce: Автоматическое удаление товаров с оценками старше 30 дней

Диагностика проблемы с устаревшими отзывами и товарами

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

Проблема: как регулярно удалять товары, у которых есть отзывы старше 30 дней, чтобы поддерживать актуальность каталога и облегчить работу с базой данных?

Как проверить наличие товаров с отзывами старше 30 дней

Подключитесь к базе данных через phpMyAdmin или используйте WP-CLI для выборки:

SELECT p.ID, p.post_title, MAX(c.comment_date) AS last_review_date
FROM wp_posts p
JOIN wp_comments c ON c.comment_post_ID = p.ID
WHERE p.post_type = 'product'
AND c.comment_approved = '1'
GROUP BY p.ID
HAVING last_review_date < DATE_SUB(NOW(), INTERVAL 30 DAY);

Если запрос вернет товары, значит на сайте есть продукты с отзывами старше 30 дней.

Пошаговое решение: автоматизация удаления товаров с устаревшими отзывами

1. Создаем пользовательскую функцию для удаления

Добавьте следующий код в файл functions.php вашей темы или в отдельный плагин:

function wpdir_delete_products_with_old_reviews() {
    global $wpdb;
    
    // Получаем ID товаров с отзывами старше 30 дней
    $query = "SELECT p.ID FROM {$wpdb->posts} p
        INNER JOIN {$wpdb->comments} c ON c.comment_post_ID = p.ID
        WHERE p.post_type = 'product'
        AND c.comment_approved = '1'
        AND c.comment_date < DATE_SUB(NOW(), INTERVAL 30 DAY)
        GROUP BY p.ID";
    $product_ids = $wpdb->get_col($query);

    if (!empty($product_ids)) {
        foreach ($product_ids as $product_id) {
            wp_delete_post($product_id, true); // true - удаление без возможности восстановления
        }
    }
}

2. Запускаем функцию по расписанию с помощью WP-Cron

Добавьте хуки для планировщика:

if (!wp_next_scheduled('wpdir_daily_delete_old_review_products')) {
    wp_schedule_event(time(), 'daily', 'wpdir_daily_delete_old_review_products');
}
add_action('wpdir_daily_delete_old_review_products', 'wpdir_delete_products_with_old_reviews');

Этот код будет запускать очистку товаров ежедневно.

Проверка результата после внедрения

  • Через 24 часа проверьте, что устаревшие товары удалены.
  • Снова выполните SQL-запрос из раздела диагностики — таких товаров не должно быть.
  • Проверьте логи ошибок и работу сайта после удаления.

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

  • Функция не запускается: Проверьте, активен ли WP-Cron и нет ли конфликтов с другими плагинами, блокирующими задачи.
  • Удаляются лишние товары: Убедитесь, что условие в SQL-запросе корректно — удаляются только товары с отзывами старше 30 дней.
  • Ошибка базы данных: Проверьте префиксы таблиц и права доступа к базе.

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

  • Перед удалением товаров сделайте резервную копию базы данных.
  • Для больших магазинов используйте пакетную обработку, чтобы избежать таймаутов.
  • Добавьте уведомления администраторам о выполнении задачи через email или лог.

Сравнение вариантов автоматического удаления товаров с устаревшими отзывами

МетодОписаниеПлюсыМинусы
WP-Cron + пользовательская функция Код для выборки и удаления товаров с отзывами старше 30 дней Гибко, без сторонних плагинов, полный контроль Требует навыков, возможны таймауты при большом объеме
Плагины очистки базы и товаров Готовые решения с интерфейсом Простота использования Могут быть избыточными, не всегда точные настройки
Ручное удаление через админку Удаление товаров вручную Простота, полный контроль Небыстро, не подходит для регулярной очистки
Как создать удобную настройку для плагина WordPress в админке с примерами кода
03.01.2026
Как настроить выработку изображений в WordPress для улучшения производительности
10.01.2026
Как создать собственный shortcode с аргументами и обработкой формы в WordPress
17.12.2025
Как изменить URL входа в админку WordPress без плагинов
20.03.2026
Авто удаление записей и комментариев в WordPress через 7 дней
06.01.2026