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

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

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

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

Отзывы в WooCommerce — это комментарии, связанные с типом поста product. Чтобы получить отзывы только для товаров из определённых категорий, нужно:

  • Собрать ID товаров из нужных категорий.
  • Получить комментарии (отзывы), относящиеся к этим товарам.

Например, категория с таксономией product_cat и слагом sale:

function get_product_ids_by_category( $category_slug ) {
    $products = get_posts([
        'post_type'      => 'product',
        'numberposts'    => -1,
        'tax_query'      => [[
            'taxonomy' => 'product_cat',
            'field'    => 'slug',
            'terms'    => $category_slug,
        ]],
        'fields'        => 'ids',
    ]);
    return $products;
}

$product_ids = get_product_ids_by_category('sale');

Пошаговое решение: удаление отзывов для товаров из категории

Удаление отзывов можно сделать через WP-CLI или программно в коде плагина/темы. Ниже пример функции для удаления отзывов по категории:

function delete_reviews_by_category( $category_slug ) {
    $product_ids = get_product_ids_by_category( $category_slug );
    if ( empty( $product_ids ) ) {
        return 'Товары в категории не найдены';
    }
    global $wpdb;
    $placeholders = implode( ',', array_fill( 0, count( $product_ids ), '%d' ) );
    
    // Получаем ID комментариев (отзывов) для товаров
    $comment_ids = $wpdb->get_col( $wpdb->prepare(
        "SELECT comment_ID FROM {$wpdb->comments} WHERE comment_post_ID IN ($placeholders) AND comment_type = 'review'",
        ...$product_ids
    ));
    
    if ( empty( $comment_ids ) ) {
        return 'Отзывы для товаров не найдены';
    }
    
    foreach ( $comment_ids as $comment_id ) {
        wp_delete_comment( $comment_id, true ); // true — удалить без возможности восстановления
    }
    return count( $comment_ids ) . ' отзывов удалено';
}

Вызов функции:

echo delete_reviews_by_category('sale');

Альтернативный вариант: удаление через WP-CLI

Если есть доступ к WP-CLI, можно выполнить SQL-запросы для удаления:

wp db query "DELETE c FROM wp_comments c INNER JOIN wp_posts p ON c.comment_post_ID = p.ID INNER JOIN wp_term_relationships tr ON p.ID = tr.object_id INNER JOIN wp_term_taxonomy tt ON tr.term_taxonomy_id = tt.term_taxonomy_id INNER JOIN wp_terms t ON tt.term_id = t.term_id WHERE c.comment_type = 'review' AND t.slug = 'sale';"

Проверить таблицы с префиксом wp_ — может отличаться на вашем сайте.

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

  • Перейдите на страницу товаров нужной категории в админке WooCommerce и откройте вкладку отзывов. Отзывы должны отсутствовать.
  • На фронтенде откройте страницу товара из категории и убедитесь, что отзывы не отображаются.
  • В базе данных в таблице wp_comments должны отсутствовать комментарии с comment_post_ID из списка товаров и comment_type = 'review'.

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

  • Пустой список товаров: если get_product_ids_by_category не возвращает ID, проверьте правильность слага категории и что в категории действительно есть товары.
  • Комментарии не удаляются: убедитесь, что у вас есть права на удаление комментариев, и что comment_type = 'review' — WooCommerce использует именно этот тип для отзывов.
  • SQL-запрос не срабатывает через WP-CLI: проверьте префикс таблиц и права пользователя базы данных.

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

  • Перед массовым удалением всегда создавайте резервную копию базы данных.
  • Для больших сайтов удаление отзывов лучше делать пакетами — например, по 100 штук, чтобы не перегружать сервер.
  • Используйте транзакции или WP-CLI для выполнения операций, чтобы избежать частичного удаления.
  • Отключите кэширование страниц и объектов на время удаления, чтобы видеть актуальный результат.

Сравнение подходов: плагин vs код vs WP-CLI

МетодПреимуществаНедостаткиРекомендации
Плагин (например, Bulk Delete)Простота для новичков, GUIМожет не иметь фильтрации по категории, нагрузка на серверИспользовать, если готовый плагин поддерживает нужные фильтры
Код (функция в теме/плагине)Гибкость, точечное удаление, легко модифицироватьТребует навыков PHP, риск ошибок без бэкапаИдеально для разработчиков, которым нужно точное управление
WP-CLIВысокая скорость, работает напрямую с БД, подходит для больших сайтовТребует доступа к командной строке и знаний SQLЛучше для серверных администраторов и опытных разработчиков
WooCommerce: как удалить отзывы только с определённых товаров
02.07.2026
Как вставить видео в WordPress с автоматическим адаптивным размером
05.04.2026
WooCommerce: автоматическое изменение статуса заказа при возврате товара
06.07.2026
Автоматическое создание резервных копий WordPress: плагины и кодовые решения
13.12.2025
Автоматический импорт продуктов в WooCommerce через WP REST API
28.12.2025