Если вы используете WordPress для сайта с отзывами, рано или поздно возникает задача удаления отзывов не просто вручную, а по определённым критериям. Например, нужно массово удалить отзывы с низким рейтингом, отзывы-спам, устаревшие или с определёнными ключевыми словами. В этой статье мы разберём, как решить эту задачу технически и эффективно с помощью кода и плагинов.
Почему важна фильтрация и удаление отзывов по критериям
Отзывы — это важный элемент доверия к сайту, но не все отзывы бывают полезными. Спам, негатив с оскорблениями, устаревшие или неактуальные отзывы могут портить репутацию и снижать качество контента. Ручное удаление каждого отзыва — слишком трудоёмкое занятие, особенно при большом количестве данных. Поэтому необходим автоматизированный подход с фильтрацией по разным параметрам.
Пример критериев удаления:
- Рейтинг ниже 2 звёзд
- Отзыв содержит запрещённые слова
- Отзыв старше 2 лет
- Отзывы от пользователей без подтверждённой почты
- Отзывы, помеченные как спам
Давайте рассмотрим, как реализовать удаление по этим критериям.
Как определить отзывы в базе WordPress
В WordPress отзывы обычно хранятся как комментарии (post_type = 'review' или обычные комментарии с определённым типом), или как записи пользовательских типов (custom post types). Чаще всего используются комментарии с мета-данными для рейтинга.
Если отзывы — это комментарии, то рейтинг обычно хранится в comment_meta с ключом, например, rating. Также есть поле comment_date для даты, и comment_approved для статуса (например, спам).
Если отзывы — это отдельный тип записей, тогда нужно проверять post_type и мета-поля.
Удаление отзывов с рейтингом ниже 2 звёзд
Вот пример функции, которая удаляет все отзывы с рейтингом ниже 2 (если отзывы — комментарии с мета-ключом 'rating'):
function wpweb_delete_low_rating_reviews() {
global $wpdb;
$rating_threshold = 2;
// Получаем ID комментариев с рейтингом ниже порога
$comment_ids = $wpdb->get_col($wpdb->prepare(
"SELECT comment_id FROM {$wpdb->commentmeta} WHERE meta_key = %s AND meta_value < %d",
'rating', $rating_threshold
));
if (empty($comment_ids)) {
return; // Нет отзывов для удаления
}
foreach ($comment_ids as $comment_id) {
wp_delete_comment($comment_id, true); // Полное удаление
}
}
Эту функцию можно запустить через WP-CLI, хуки или вручную в админке с помощью кастомного плагина.
Удаление отзывов, содержащих запрещённые слова
Спам или неуместные отзывы легко отфильтровать по ключевым словам. Ниже пример функции для удаления отзывов с текстом, содержащим слова из списка:
function wpweb_delete_reviews_by_bad_words() {
global $wpdb;
$bad_words = ['плохой', 'спам', 'некачественный']; // Добавьте свои слова
$placeholders = implode(',', array_fill(0, count($bad_words), '%s'));
$query = "SELECT comment_ID, comment_content FROM {$wpdb->comments} WHERE comment_approved = '1'";
$comments = $wpdb->get_results($query);
foreach ($comments as $comment) {
foreach ($bad_words as $word) {
if (mb_stripos($comment->comment_content, $word) !== false) {
wp_delete_comment($comment->comment_ID, true);
break;
}
}
}
}
Такой подход безопасен и гибок, можно расширять список слов и адаптировать под свои нужды.
Удаление устаревших отзывов (старше 2 лет)
Часто требуется очистить старые отзывы, чтобы не загромождать базу:
function wpweb_delete_old_reviews() {
global $wpdb;
$date_threshold = date('Y-m-d H:i:s', strtotime('-2 years'));
$old_comments = $wpdb->get_col($wpdb->prepare(
"SELECT comment_ID FROM {$wpdb->comments} WHERE comment_date < %s",
$date_threshold
));
foreach ($old_comments as $comment_id) {
wp_delete_comment($comment_id, true);
}
}
Плагины для управления и фильтрации отзывов в WordPress
Для тех, кто не хочет писать код, есть несколько полезных плагинов:
- WP Customer Reviews — удобный плагин для сбора и модерации отзывов с возможностью фильтрации.
- Akismet — автоматическая фильтрация спама, полезна для автоматического удаления спам-отзывов.
- Clearfy Pro (https://wpshop.ru/clearfy-pro/?utm_source=wpweb.ru&utm_medium=article&utm_campaign=kak-udalit-otzyvy-po-kriteriyam) — плагин для оптимизации WordPress с возможностью тонкой настройки комментариев и отзывов, включая массовое удаление.
Использование плагинов удобно, но иногда требуется кастомный код, особенно при специфичных условиях удаления.
Как запускать и автоматизировать удаление отзывов
Для запуска функций удаления можно использовать несколько способов:
Через WP-CLI
В консоли сервера можно написать команду для вызова нужной функции, например, через wp eval-file.
Через Cron-задания (wp_cron)
Добавьте функцию в планировщик WordPress для регулярной очистки:
function wpweb_schedule_review_cleanup() {
if (!wp_next_scheduled('wpweb_daily_review_cleanup')) {
wp_schedule_event(time(), 'daily', 'wpweb_daily_review_cleanup');
}
}
add_action('wp', 'wpweb_schedule_review_cleanup');
add_action('wpweb_daily_review_cleanup', 'wpweb_delete_low_rating_reviews');
// Аналогично можно цеплять другие функции удаления
Ручной запуск в админке
Создайте отдельную страницу с кнопкой, которая вызывает нужную функцию, если не хотите пользоваться консолью.
Важные рекомендации и безопасность при удалении отзывов
Перед массовым удалением обязательно сделайте резервную копию базы данных! Ошибки могут привести к потере важной информации.
Тестируйте функции на тестовом сайте, чтобы удостовериться, что удаляются только нужные отзывы.
Также не забывайте учитывать кеширование: после удаления отзывов очистите кеш сайта, чтобы изменения отобразились корректно.
Выводы и полезные ссылки
Удаление отзывов по критериям — реальная и частая задача для сайтов на WordPress с отзывами. Используя приведённые примеры кода, вы сможете автоматизировать процесс и поддерживать качество контента.
Рекомендуем посмотреть Clearfy Pro для расширенного контроля над комментариями и отзывами.