wpmoney.ru wordpress WP Money

Как автоматически оценивать качество отзывов WooCommerce с помощью PHP

Проблема: низкокачественные отзывы в WooCommerce и их фильтрация

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

Диагностика качества отзывов WooCommerce

Для начала нужно понять, что считать «низкокачественным» отзывом. Обычно критериями служат:

  • длина текста (слишком короткие отзывы часто неинформативны);
  • наличие ключевых слов или ссылок (чаще признак спама);
  • повторяющийся контент;
  • оценка звёздами без комментария;
  • частота оставления отзывов одним пользователем.

Для диагностики можно выгрузить отзывы из базы и быстро проанализировать их с помощью SQL-запросов или простого PHP-скрипта.

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

1. Добавление метаполя для оценки качества

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

2. Функция оценки качества отзыва

function get_review_quality_score($comment) {
    $score = 0;

    // Проверяем длину текста
    $text_length = strlen($comment->comment_content);
    if ($text_length >= 100) {
        $score += 50;
    } elseif ($text_length >= 50) {
        $score += 20;
    }

    // Проверяем наличие ссылок
    if (preg_match('/https?:\/\//', $comment->comment_content)) {
        $score -= 30; // Ссылки снижают качество
    }

    // Проверяем рейтинг
    $rating = intval(get_comment_meta($comment->comment_ID, 'rating', true));
    if ($rating >= 4) {
        $score += 30;
    } elseif ($rating <= 2) {
        $score -= 10;
    }

    // Проверяем повторяемость контента
    global $wpdb;
    $count_similar = $wpdb->get_var($wpdb->prepare(
        "SELECT COUNT(*) FROM $wpdb->comments WHERE comment_content = %s AND comment_ID != %d",
        $comment->comment_content, $comment->comment_ID
    ));
    if ($count_similar > 0) {
        $score -= 40;
    }

    // Ограничиваем минимальный и максимальный балл
    $score = max(0, min(100, $score));

    return $score;
}

3. Скрипт массовой оценки существующих отзывов

function update_all_review_quality_scores() {
    $args = [
        'post_type' => 'product',
        'status' => 'approve',
        'number' => 0,
    ];
    $comments = get_comments($args);

    foreach ($comments as $comment) {
        $score = get_review_quality_score($comment);
        update_comment_meta($comment->comment_ID, 'review_quality_score', $score);
    }
}

// Запустить один раз для обновления
update_all_review_quality_scores();

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

add_action('comment_post', function($comment_id, $comment_approved) {
    if ($comment_approved) {
        $comment = get_comment($comment_id);
        if ($comment->comment_type === 'review' || $comment->comment_post_ID) {
            $score = get_review_quality_score($comment);
            update_comment_meta($comment_id, 'review_quality_score', $score);

            // Автоматическая модерация: скрываем отзывы с низким баллом
            if ($score < 30) {
                wp_set_comment_status($comment_id, 'hold');
            }
        }
    }
}, 10, 2);

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

Чтобы убедиться, что автоматическая оценка работает:

  • Проверьте в админке комментариев столбец с метаполем review_quality_score (можно добавить через фильтр manage_edit-comments_columns);
  • Новые отзывы с низким баллом должны автоматически попадать на модерацию (статус hold);
  • Проверьте работу на тестовых отзывах разного качества, чтобы увидеть корректность подсчёта баллов;
  • Поиск отзывов с баллом ниже 30 через SQL:
SELECT comment_ID, comment_content, meta_value AS review_quality_score
FROM wp_comments
JOIN wp_commentmeta ON wp_comments.comment_ID = wp_commentmeta.comment_id
WHERE meta_key = 'review_quality_score' AND meta_value < 30;

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

  • Отсутствие проверки типа комментария — в WooCommerce отзывы — это комментарии с типом review или к типу product. Без фильтрации можно случайно оценивать не отзывы, а обычные комментарии блога.
    Решение: добавьте проверку $comment->comment_type === 'review' или get_post_type($comment->comment_post_ID) === 'product'.
  • Неверное использование хуков — оценка должна происходить после одобрения комментария. Если оценивать до проверки, можно пропустить спам.
    Решение: используйте хук comment_post с проверкой $comment_approved.
  • Плохая производительность при массовом обновлении — при большом количестве отзывов скрипт может тормозить.
    Решение: используйте WP-CLI для пакетной обработки или разбивайте обработку на части.

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

  • Не используйте оценку отзывов для автоматического удаления — только для модерации. Лучше, чтобы человек проверял низкокачественные отзывы перед удалением.
  • Кэшируйте результаты оценки, чтобы не пересчитывать при каждом вызове.
  • Регулярно обновляйте и проверяйте условия оценки, чтобы адаптироваться к изменяющимся спам-трендам.
  • Используйте индексы в базе по comment_content и метаданным, чтобы ускорить поиск повторов и фильтрацию.

Сравнение методов оценки отзывов: код против плагинов

МетодПреимуществаНедостаткиПример
Код на PHPГибкая настройка под задачи, нет затрат на плагины, полный контрольТребует знаний, нуждается в поддержке, может быть медленнее при большом объёмеПример из статьи: функция get_review_quality_score()
Плагины модерации отзывовПростота настройки, готовый функционалМеньше гибкости, дополнительные нагрузки, лицензииWP Review Pro, WP Customer Reviews
×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше