yelly.ru wordpress Yelly

Автоматическое удаление товара в WooCommerce после отрицательной оценки

Проблема: необходимость удаления товара после негативного отзыва

В интернет-магазинах на WooCommerce иногда возникает задача: автоматически удалить или скрыть товар из каталога, если он получает слишком много отрицательных отзывов. Это помогает поддерживать качество ассортимента и улучшать репутацию магазина.

Диагностика сценария

Для начала нужно понять, как именно WooCommerce хранит отзывы и оценки товаров. Отзывы — это комментарии с метаданными по оценке (звезды). Средний рейтинг товара рассчитывается динамически.

  • Проверяем, что в комментариях для товаров есть мета rating.
  • Проверяем, что средний рейтинг рассчитывается корректно — функция wc_get_rating_html() и get_average_rating().
  • Убедитесь, что в базе есть товары с низким рейтингом.

Пошаговое решение: удаление товара при среднем рейтинге ниже порога

Реализуем проверку рейтинга и удаление товара с помощью планировщика WP-Cron. Такой подход позволит регулярно сканировать товары и удалять те, что не соответствуют критериям.

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

function yelly_remove_low_rated_products() {
    $threshold = 2.5; // Пороговое значение рейтинга
    $args = array(
        'post_type' => 'product',
        'posts_per_page' => -1,
        'post_status' => 'publish',
    );
    $products = get_posts($args);

    foreach ($products as $product_post) {
        $product = wc_get_product($product_post->ID);
        if (!$product) continue;

        $avg_rating = floatval($product->get_average_rating());
        if ($avg_rating > 0 && $avg_rating < $threshold) {
            // Удаляем товар навсегда
            wp_delete_post($product->get_id(), true);
        }
    }
}

2. Добавляем событие в WP-Cron

function yelly_schedule_low_rating_check() {
    if (!wp_next_scheduled('yelly_check_low_rating_hook')) {
        wp_schedule_event(time(), 'daily', 'yelly_check_low_rating_hook');
    }
}
add_action('wp', 'yelly_schedule_low_rating_check');
add_action('yelly_check_low_rating_hook', 'yelly_remove_low_rated_products');

3. Очистка при деактивации плагина или темы

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

Проверка результата

  • Добавьте несколько отзывов с оценками ниже 3 для тестового товара.
  • Запустите вручную функцию yelly_remove_low_rated_products() через WP-CLI или вызовите ее в админке.
  • Проверьте, удалился ли товар из списка товаров и сайта.
  • Через 24 часа убедитесь, что WP-Cron запустил задачу автоматически (можно использовать плагин WP Crontrol).

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

  • Низкий рейтинг не учитывается: проверьте, что отзывы действительно имеют мета rating и что средний рейтинг считается правильно.
  • Товар не удаляется: убедитесь, что функция wp_delete_post() вызывается с правильным ID и вторым параметром true для безвозвратного удаления.
  • WP-Cron не срабатывает: настройте внешние вызовы cron, если посещаемость сайта низкая, или используйте системный cron для wp-cron.php.

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

  • Перед удалением товара лучше сначала переводить его статус в draft или private — чтобы избежать потери данных и иметь возможность восстановить.
  • Для больших магазинов ограничьте количество товаров, проверяемых за один запуск, чтобы избежать таймаутов:
$args['posts_per_page'] = 50;
$args['paged'] = $paged; // реализуйте пагинацию
  • Резервное копирование — обязательно перед автоматическими удалениями.
  • Для уведомления администраторов о действиях используйте отправку email или логи.

Сравнение вариантов реализации

МетодПлюсыМинусы
Плагин для модерации отзывовГотовое решение, UI для управленияМожет быть тяжелым, платным
Код через WP-Cron (наш вариант)Легкий, кастомный, интегрируемыйТребует знаний, настройка cron
Ручная проверка и удалениеПолный контрольЗатратно по времени
×
Прокачай свой сайт WordPress!

WordPress

-20% на премиум темы и плагины

Создай сайт своей мечты ⋙