Проблема: низкокачественные отзывы в 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 |