WooCommerce: как автоматически удалять товары с отрицательными отзывами

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

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

Как определить товары с отрицательными отзывами

Отрицательные отзывы обычно имеют низкий рейтинг (1 или 2 звезды). Чтобы автоматически удалять такие товары, нужно:

  • Выбрать товары, средний рейтинг которых ниже заданного порога;
  • Или товары, у которых определённое количество отзывов с низкой оценкой.

WooCommerce хранит отзывы как комментарии с типом review и мета-данными рейтинга в commentmeta. Для выборки таких товаров нужно использовать WP_Query и WP_Comment_Query.

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

1. Запланировать задачу WP-Cron

Добавим еженедельный крон-задачу для проверки товаров:

if ( ! wp_next_scheduled( 'wpbit_delete_bad_review_products' ) ) {
    wp_schedule_event( time(), 'weekly', 'wpbit_delete_bad_review_products' );
}

2. Функция для выборки и удаления товаров

Порог — товары со средним рейтингом ниже 2.0 и минимум 3 отзыва.

function wpbit_delete_bad_review_products() {
    global $wpdb;
    // Получаем ID товаров с плохими отзывами
    $query = "
        SELECT comment_post_ID, AVG(meta_rating.meta_value) as avg_rating, COUNT(*) as review_count
        FROM {$wpdb->comments} AS comments
        INNER JOIN {$wpdb->commentmeta} AS meta_rating ON comments.comment_ID = meta_rating.comment_id AND meta_rating.meta_key = 'rating'
        WHERE comments.comment_approved = 1 AND comments.comment_type = 'review'
        GROUP BY comment_post_ID
        HAVING avg_rating < 2 AND review_count >= 3
    ";

    $results = $wpdb->get_results( $query );

    if ( empty( $results ) ) {
        return; // Нет товаров для удаления
    }

    foreach ( $results as $row ) {
        $product_id = intval( $row->comment_post_ID );
        // Удаляем товар
        wp_delete_post( $product_id, true );
    }
}
add_action( 'wpbit_delete_bad_review_products', 'wpbit_delete_bad_review_products' );

Как проверить, что решение работает

  • Запустите задачу вручную: do_action('wpbit_delete_bad_review_products'); в functions.php или через WP CLI: wp eval 'do_action("wpbit_delete_bad_review_products");'.
  • Проверьте, что товары с низким рейтингом удалились из админки WooCommerce.
  • В базе данных в таблице wp_posts проверьте, что записи с ID этих товаров отсутствуют.
  • Посмотрите лог ошибок и событий (если есть).

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

  • WP-Cron не выполняется автоматически: убедитесь, что на сервере настроен реальный cron или используйте плагин WP Crontrol для проверки и запуска задач вручную.
  • Функция не удаляет товары: проверьте правильность SQL-запроса, наличие комментариев с рейтингом, права пользователя (код должен запускаться с правами администратора).
  • Удаляются не те товары: возможно, где-то неправильная логика в HAVING. Для отладки выводите результаты запроса через error_log(print_r($results, true));.
  • Удаление товаров мешает другие хуки: проверьте, что нет конфликтов с плагинами, которые блокируют удаление (например, плагины безопасности или кастомные фильтры).

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

  • Перед удалением товаров делайте резервную копию базы данных.
  • Добавьте логирование удаленных товаров для аудита.
  • Используйте wp_delete_post( $product_id, true ) с параметром true для полного удаления, иначе товар будет помещён в корзину.
  • Если у вас большой магазин, выполните удаление партиями, чтобы не перегружать базу данных.
  • Отключите эту автоматизацию на время массовых акций или импортов, чтобы избежать нежелательных удалений.

Таблица сравнения вариантов реализации

МетодПлюсыМинусыРесурсы
WP-Cron с SQL-запросомПолный контроль, без плагинов, быстроНужно писать SQL, возможны ошибки, требует знанийСредние
Плагин для управления отзывами и удалениемПростота настройки, GUIОграниченная кастомизация, нагрузка, платные функцииЗависит от плагина
Ручное удалениеТочность и контрольТрудозатратно, риск забытьВысокие трудозатраты
Как установить автоматическое удаление старого контента WordPress с помощью AJAX и Cron
13.04.2026
Как автоматически изменять заголовки постов WordPress по шаблону
10.03.2026
Как удалить категории без записей в WordPress автоматически
19.02.2026
WooCommerce: как автоматически удалять товары без заказов за указанный период
13.06.2026
WooCommerce: как автоматически удалять товары из магазина по статусу заказов
10.05.2026