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 дней Гибко, без сторонних плагинов, полный контроль Требует навыков, возможны таймауты при большом объеме
Плагины очистки базы и товаров Готовые решения с интерфейсом Простота использования Могут быть избыточными, не всегда точные настройки
Ручное удаление через админку Удаление товаров вручную Простота, полный контроль Небыстро, не подходит для регулярной очистки
Как автоматизировать сборку данных с помощью AJAX в WordPress
04.04.2026
WooCommerce: Автоматическое удаление товаров с отсутствующими атрибутами и вариациями
13.05.2026
Как отключить Gutenberg и оставить классический редактор в WordPress
06.12.2025
Как добавить свой shortcode в WordPress
03.11.2025
Оптимизация базы данных WordPress: практические советы и примеры
17.11.2025