Проблема: необходимость автоматического удаления одобренных отзывов
В WooCommerce отзывы клиентов могут скапливаться, иногда возникает задача автоматического удаления отзывов после их модерации — например, для временных акций или тестирования. В стандартном функционале WordPress и WooCommerce такой возможности нет, поэтому приходится реализовывать её вручную через код.
Диагностика задачи: когда и почему удалять отзывы автоматически
Для начала уточним, какие именно отзывы нужно удалять автоматически. Обычно отзывы — это комментарии с типом comment_type = 'review' или просто comment_type = '' (если не используется кастомизация). В WooCommerce отзывы — комментарии к товарам с рейтингом.
Удалять отзывы сразу после публикации или после одобрения? В WordPress отзывы проходят модерацию, и статус меняется с hold (ожидает) на approve (одобрен). Можно отследить этот момент и запустить удаление.
Пошаговое решение: код для автоматического удаления отзывов после модерации
Используем хук transition_comment_status, который срабатывает при смене статуса комментария:
function wps_delete_review_after_approval($new_status, $old_status, $comment) {
// Проверяем, что комментарий — отзыв к товару
if ('approve' === $new_status && 'hold' === $old_status) {
// Проверяем, что это отзыв к товару WooCommerce
if ('review' === $comment->comment_type || ($comment->comment_post_ID && 'product' === get_post_type($comment->comment_post_ID))) {
// Удаляем отзыв без возможности восстановления
wp_delete_comment($comment->comment_ID, true);
}
}
}
add_action('transition_comment_status', 'wps_delete_review_after_approval', 10, 3);Этот код удалит отзыв сразу после его одобрения модератором.
Настройка для удаления отзывов только с определённым рейтингом
Если нужно удалять отзывы, например, только с 1-2 звёздами, добавим проверку рейтинга (рейтинг хранится в мета-комментарии rating):
function wps_delete_low_rating_review($new_status, $old_status, $comment) {
if ('approve' === $new_status && 'hold' === $old_status) {
if ('review' === $comment->comment_type || ($comment->comment_post_ID && 'product' === get_post_type($comment->comment_post_ID))) {
$rating = intval(get_comment_meta($comment->comment_ID, 'rating', true));
if ($rating > 0 && $rating <= 2) { // Удаляем отзывы с рейтингом 1 или 2
wp_delete_comment($comment->comment_ID, true);
}
}
}
}
add_action('transition_comment_status', 'wps_delete_low_rating_review', 10, 3);Проверка результата после внедрения
1. Добавьте в WooCommerce новый отзыв для товара, поставьте статус «ожидает модерации» (обычно комментарий создаётся в статусе hold).
2. В панели администратора WordPress одобрите этот отзыв.
3. После одобрения отзыв должен автоматически удалиться и исчезнуть из списка комментариев и на странице товара.
4. Проверьте таблицу базы данных wp_comments — комментарий должен быть удалён (если параметр удаления принудительный — wp_delete_comment(..., true)).
Частые ошибки и как исправить
- Отзывы не удаляются после одобрения
Проверьте, что хукtransition_comment_statusкорректно подключён и функция вызывается. Отладьте с помощьюerror_logилиvar_dump. - Удаляются не все нужные отзывы
Убедитесь, что проверка типа комментария и поста правильна. WooCommerce хранит отзывы как обычные комментарии с типомreviewили пустым типом, но относится кproductпостам. - Отзывы удаляются, но остаются в базе (непринудительно)
Используйте второй аргументtrueвwp_delete_comment($comment_id, true)для полного удаления, иначе комментарий просто помечается как удалённый. - Проблемы совместимости с кешированием
Если отзывы отображаются после удаления, очистите кеш сайта или плагинов кеширования.
Практические советы по безопасности и производительности
- Не используйте автоматическое удаление отзывов без чёткой бизнес-логики — это может негативно повлиять на SEO и доверие клиентов.
- Для массовых операций с отзывами лучше запускать скрипты по cron, а не делать удаление на каждый одобряемый отзыв, чтобы снизить нагрузку.
- Всегда тестируйте изменения на тестовой среде, чтобы избежать случайной потери данных.
- Если используете плагин Clearfy Pro от WPShop, можно дополнительно оптимизировать работу с комментариями и отзывами, например, убрать дубли или кешировать их.
Сравнение вариантов удаления отзывов
| Метод | Описание | Плюсы | Минусы |
|---|---|---|---|
| Удаление сразу после одобрения (хук) | Код на transition_comment_status, удаление сразу | Автоматизация, простота | Риск случайного удаления нужных отзывов |
| Массовое удаление через WP-CLI | Команды для выборочного удаления комментариев | Контроль, можно запускать по расписанию | Требует доступа к серверу и навыков |
| Удаление вручную через админку | Админка WordPress — массовые действия | Простота, безопасность | Ручной труд, не автоматизировано |