WooCommerce: как удалить отзывы только с определённых товаров

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

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

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

Отзывы в WooCommerce — это кастомные записи типа comment с типом комментария review. Связь с товаром устанавливается через comment_post_ID, который равен ID товара (post типа product).

Для получения списка отзывов, относящихся к конкретному товару, используйте WP_Query или прямой SQL-запрос:

SELECT comment_ID FROM wp_comments WHERE comment_post_ID = 123 AND comment_type = 'review';

Замените 123 на ID нужного товара.

Пошаговое решение: удаление отзывов по ID товара с помощью PHP

Для массового удаления отзывов с конкретного товара рекомендуем использовать следующий скрипт, который можно запустить один раз, например, в файле темы или через WP-CLI:

function delete_reviews_by_product_id($product_id) {
    global $wpdb;
    // Получаем ID отзывов
    $comment_ids = $wpdb->get_col($wpdb->prepare(
        "SELECT comment_ID FROM {$wpdb->comments} WHERE comment_post_ID = %d AND comment_type = 'review'",
        $product_id
    ));
    if(empty($comment_ids)) {
        return 0; // Отзывов нет
    }
    foreach($comment_ids as $comment_id) {
        wp_delete_comment($comment_id, true); // true — удаление с мета
    }
    return count($comment_ids);
}

// Пример вызова для товара с ID 123
$deleted = delete_reviews_by_product_id(123);
echo "Удалено отзывов: " . $deleted;

Обратите внимание, что функция wp_delete_comment() удаляет комментарий вместе с метаданными и триггерит все связанные хуки.

Как запустить код

  • Вставьте функцию в файл functions.php активной темы.
  • Вызовите функцию, заменив ID товара на нужный.
  • После выполнения удалите или закомментируйте вызов, чтобы предотвратить повторное удаление.

Проверка результата

  • Перейдите на страницу товара в админке WooCommerce и проверьте вкладку отзывов — они должны исчезнуть.
  • В разделе Комментарии в WordPress-фоне фильтруйте по типу review и по ID товара, чтобы убедиться, что отзывы удалены.
  • Для дополнительной проверки можно выполнить SQL-запрос из раздела диагностики и убедиться, что комментариев с указанным comment_post_ID и типом review нет.

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

  • Отзывы не удаляются полностью: возможно, комментарии имеют метаданные или кэш. Используйте второй параметр true в wp_delete_comment(), чтобы удалить метаданные.
  • Неправильный ID товара: проверьте, что передаете именно ID товара, а не поста другого типа.
  • Нет прав на удаление: убедитесь, что код выполняется с правами администратора.
  • Ошибки при подключении к базе: используйте глобальную переменную $wpdb и проверяйте корректность SQL-запросов.

Альтернативные варианты: плагины vs код

МетодПлюсыМинусыКогда использовать
Ручное удаление в админкеПросто, не требует кодаМедленно, неудобно для большого количества отзывовМало отзывов, единичные случаи
Плагин для управления отзывамиИнтерфейс, дополнительные фильтрыМожет замедлить сайт, не всегда точечное удалениеТребуется регулярное управление отзывами
Кастомный код (предложенный выше)Полный контроль, быстрое массовое удалениеНеобходимы навыки разработки, риск ошибок без тестовУдаление большого количества отзывов с конкретных товаров

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

  • Перед запуском скрипта сделайте резервную копию базы данных.
  • Тестируйте код на копии сайта, чтобы исключить потерю данных.
  • Не запускайте подобные массовые операции на пиковых нагрузках.
  • Удаление отзывов триггерит хуки, учитывайте возможное влияние на кэш и индексацию.
  • Если отзывы связаны с пользовательским контентом, предупреждайте пользователей о удалении.
WooCommerce: автоматическое удаление неоплаченных заказов после отсутствия платежа
19.06.2026
WooCommerce: как настроить авторизацию по email вместо логина
07.05.2026
WooCommerce: как автоматически менять статус заказа по установленному сроку
27.05.2026
WooCommerce: автоматическое удаление неоплаченных заказов с подтверждением
29.06.2026
Как удалить пустые мета-данные в WordPress: эффективные методы и примеры
15.03.2026