Диагностика проблемы: зачем удалять отзывы со статусом «На модерации»
В WooCommerce отзывы пользователей проходят модерацию, прежде чем появиться на сайте. Иногда накопление большого количества отзывов в статусе «На модерации» (pending) приводит к перегрузке базы данных и замедлению работы сайта. Особенно это актуально для магазинов с высокой активностью и спам-атаками.
Проверить количество отзывов на модерации можно в админке WordPress: Отзывы > Все отзывы, затем фильтр по статусу «Ожидает проверки». Или через SQL запрос:
SELECT COUNT(*) FROM wp_comments WHERE comment_approved = '0' AND comment_type = 'review';Если число отзывов на модерации постоянно растёт, есть смысл их автоматически удалять через заданный период.
Пошаговое решение: автоматическое удаление отзывов со статусом «На модерации»
1. Создаём функцию для удаления отзывов старше определённого времени
Добавим следующий код в файл functions.php вашей темы или в кастомный плагин:
function wp_delete_old_pending_reviews() {
global $wpdb;
// Удаляем отзывы, которые в статусе pending и старше 7 дней
$days_old = 7;
$date_threshold = date('Y-m-d H:i:s', strtotime("-{$days_old} days"));
$reviews_to_delete = $wpdb->get_col(
$wpdb->prepare(
"SELECT comment_ID FROM $wpdb->comments WHERE comment_approved = '0' AND comment_type = 'review' AND comment_date < %s",
$date_threshold
)
);
if (!empty($reviews_to_delete)) {
foreach ($reviews_to_delete as $comment_id) {
wp_delete_comment($comment_id, true); // true — принудительное удаление
}
}
}2. Настраиваем cron задачу для регулярного запуска
Добавьте хук для планировщика WordPress:
add_action('wp_delete_pending_reviews_event', 'wp_delete_old_pending_reviews');
function wp_schedule_pending_reviews_deletion() {
if (!wp_next_scheduled('wp_delete_pending_reviews_event')) {
wp_schedule_event(time(), 'daily', 'wp_delete_pending_reviews_event');
}
}
add_action('wp', 'wp_schedule_pending_reviews_deletion');Этот код запустит удаление отзывов ежедневно. Если хотите изменить период, замените 'daily' на 'hourly' или 'twicedaily'.
Проверка результата после внедрения
- В админке перейдите в раздел Отзывы и проверьте, уменьшилось ли количество отзывов в статусе «На модерации».
- Для более точной проверки используйте SQL-запрос:
SELECT COUNT(*) FROM wp_comments WHERE comment_approved = '0' AND comment_type = 'review';Запускайте скрипт вручную, вызвав функцию через WP-CLI:
wp eval 'wp_delete_old_pending_reviews();'Если отзывы старше 7 дней удалились, значит всё работает корректно.
Частые ошибки и как их исправить
- Отзывы не удаляются — проверьте, что в базе таблица
wp_commentsсодержит отзывы сcomment_type = 'review'. В некоторых версиях WooCommerce тип может отличаться (например, «comment»). В этом случае замените условие в запросе. - Крон-задача не запускается — убедитесь, что на вашем сайте посещения активны, так как WP-Cron зависит от трафика. Для теста можно запустить вручную через WP-CLI или плагин WP Crontrol.
- Удаление отзывов влияет на рейтинг — удостоверьтесь, что удаляете только отзывы с модерацией, а не опубликованные. В коде фильтр по
comment_approved = '0'гарантирует это.
Практические советы по безопасности и производительности
- Всегда делайте резервную копию базы данных перед внедрением автоматического удаления данных.
- Если база очень большая, используйте пакетное удаление, чтобы избежать таймаутов:
foreach (array_chunk($reviews_to_delete, 50) as $chunk) {
foreach ($chunk as $comment_id) {
wp_delete_comment($comment_id, true);
}
sleep(1); // пауза 1 секунда
}- Для улучшения производительности используйте плагин WP Crontrol для мониторинга и ручного запуска cron-задач.
- Если вы используете WPShop, можно интегрировать это решение с их плагином Clearfy Pro, который оптимизирует базу и может помочь с очисткой лишних данных.
Сравнение вариантов реализации удаления отзывов WooCommerce
| Метод | Плюсы | Минусы | Рекомендации |
|---|---|---|---|
| Ручное удаление в админке | Простота, нет кода | Трудозатратно при большом количестве отзывов | Подходит для редких случаев |
| Автоматизированный скрипт с WP-Cron | Автоматизация, экономия времени | Зависимость от WP-Cron, нужна базовая настройка | Лучший вариант для регулярной очистки |
| Плагины очистки базы данных | Дополнительные функции оптимизации | Могут быть избыточными, риск удаления нужных данных | Используйте с осторожностью, делайте бэкапы |