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

|

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

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

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

Как определить отрицательную оценку в WooCommerce

WooCommerce использует стандартную систему отзывов WordPress. Оценка — это значение от 1 до 5, связанное с комментарием к товару.

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

Пример функции для получения среднего рейтинга товара

function get_average_product_rating( $product_id ) {
    global $wpdb;
    $query = $wpdb->prepare(
        "SELECT AVG(meta_value+0) FROM {$wpdb->commentmeta} cm
         INNER JOIN {$wpdb->comments} c ON cm.comment_id = c.comment_ID
         WHERE cm.meta_key = 'rating' AND c.comment_post_ID = %d AND c.comment_approved = 1",
        $product_id
    );
    return (float) $wpdb->get_var($query);
}

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

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

function delete_product_if_low_rating( $product_id, $threshold = 2.0 ) {
    $average_rating = get_average_product_rating( $product_id );
    if ( $average_rating > 0 && $average_rating < $threshold ) {
        wp_delete_post( $product_id, true ); // true - принудительное удаление без корзины
        return true;
    }
    return false;
}

2. Автоматизация проверки после добавления отзыва

Используем хук comment_post, который срабатывает после сохранения отзыва. Проверяем, если это отзыв к товару и если есть рейтинг, запускаем проверку рейтинга.

add_action( 'comment_post', 'check_and_delete_product_after_review', 10, 3 );
function check_and_delete_product_after_review( $comment_ID, $comment_approved, $commentdata ) {
    if ( $comment_approved != 1 ) return; // Только одобренные отзывы

    $product_id = $commentdata['comment_post_ID'];
    if ( 'product' !== get_post_type( $product_id ) ) return; // Только товары

    $rating = intval( get_comment_meta( $comment_ID, 'rating', true ) );
    if ( $rating === 0 ) return; // Если рейтинг не указан

    // Порог рейтинга для удаления
    $threshold = 2.0;
    delete_product_if_low_rating( $product_id, $threshold );
}

3. Добавляем CRON-задачу для периодической проверки

Чтобы избежать пропуска товаров с низким рейтингом, проверяем все товары раз в день.

if ( ! wp_next_scheduled( 'daily_check_low_rating_products' ) ) {
    wp_schedule_event( time(), 'daily', 'daily_check_low_rating_products' );
}
add_action( 'daily_check_low_rating_products', 'daily_check_and_delete_products' );

function daily_check_and_delete_products() {
    $args = [
        'post_type'      => 'product',
        'posts_per_page' => -1,
        'post_status'    => 'publish',
        'fields'         => 'ids',
    ];
    $products = get_posts( $args );

    foreach ( $products as $product_id ) {
        delete_product_if_low_rating( $product_id, 2.0 );
    }
}

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

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

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

Сравнение вариантов реализации удаления товаров по рейтингу

ВариантПреимуществаНедостатки
Удаление после каждого отзыва (хук comment_post)Мгновенная реакция, минимальный задержкаРиск удаления при единичном негативном отзыве, нагрузка при массовых отзывах
Периодическая проверка CRONКонтроль, анализ среднего рейтинга, меньше ложных удаленийЗадержка в удалении, нагрузка при большом количестве товаров
Ручной запуск проверкиПолный контроль, отсутствие автоматических ошибокТребуется время администратора, может быть забыто
Как автоматически удалять неактивных пользователей в WordPress
09.06.2026
Как создать динамические формы в WordPress с помощью AJAX
15.12.2025
Как полностью удалить остаточные файлы и записи после удаления продуктов в WooCommerce
26.05.2026
Как удалить соседние символы в URL WordPress для улучшения SEO и удобства
16.01.2026
Как использовать метаданные для оптимизации WordPress
13.01.2026
×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее