Диагностика проблемы: зачем удалять старые отзывы в WooCommerce
Магазины на WooCommerce часто накапливают большое количество отзывов. При этом старые отзывы могут быть неактуальными, содержать устаревшую информацию или снижать общий рейтинг товара из-за изменений в продукте. Ручное удаление отзывов неудобно и времязатратно. Автоматизация этого процесса позволяет поддерживать актуальность отзывов и облегчает администрирование.
Пошаговое решение: скрипт для автоматического удаления отзывов по дате
WooCommerce хранит отзывы в виде комментариев с типом comment_type = 'review'. Мы можем написать функцию, которая будет удалять отзывы старше определённого количества дней, например, 180 дней.
Добавьте следующий код в файл functions.php вашей дочерней темы или в кастомный плагин:
function wpmarket_delete_old_woocommerce_reviews() {
global $wpdb;
$days = 180; // Удалять отзывы старше 180 дней
$date_threshold = date('Y-m-d H:i:s', strtotime('-'. $days .' days'));
// Получаем ID комментариев-отзывов старше порога
$old_reviews = $wpdb->get_col($wpdb->prepare(
"SELECT comment_ID FROM {$wpdb->comments}
WHERE comment_type = 'review'
AND comment_date < %s",
$date_threshold
));
if (!empty($old_reviews)) {
foreach ($old_reviews as $comment_id) {
wp_delete_comment($comment_id, true); // true - удалить навсегда
}
}
}
// Запускаем функцию раз в сутки с помощью WP-Cron
if (!wp_next_scheduled('wpmarket_daily_delete_old_reviews')) {
wp_schedule_event(time(), 'daily', 'wpmarket_daily_delete_old_reviews');
}
add_action('wpmarket_daily_delete_old_reviews', 'wpmarket_delete_old_woocommerce_reviews');Этот код создает ежедневное событие, которое удаляет все отзывы старше 180 дней.
Как настроить интервал удаления
Чтобы изменить период удаления, поменяйте значение переменной $days на нужное количество дней.
Проверка результата после внедрения
- Откройте базу данных, например через phpMyAdmin, и выполните запрос:
SELECT COUNT(*) FROM wp_comments WHERE comment_type = 'review' AND comment_date < DATE_SUB(NOW(), INTERVAL 180 DAY);Если количество отзывов, подходящих под условие, уменьшается после запуска задачи, значит скрипт работает.
- В админке WordPress зайдите в раздел «Отзывы» (или «Комментарии» с фильтром по типу) и проверьте наличие старых отзывов.
Для ручного запуска функции во время тестирования можно вызвать wpmarket_delete_old_woocommerce_reviews(); через WP-CLI или временно добавить вызов в functions.php.
Частые ошибки и как их исправить
- Отсутствие cron-задачи: Если событие
wpmarket_daily_delete_old_reviewsне запускается, проверьте, работает ли WP-Cron. На некоторых серверах он отключен. В этом случае настройте системный cron для запускаwp-cron.php. - Удаление не тех комментариев: Убедитесь, что в базе у отзывов указан
comment_type = 'review'. Если используется другой тип, измените условие запроса. - Права доступа: Функция
wp_delete_comment()требует прав администратора. Запускайте код только от имени администратора. - Кэш и индексы: После удаления отзывов может потребоваться очистить кэш сайта и поисковых индексов.
Практические советы по безопасности и производительности
- Для больших магазинов удаление большого количества отзывов за один раз может вызвать нагрузку. В этом случае реализуйте пакетное удаление, например по 50 отзывов за один запуск, используя
LIMITв SQL-запросе. - Перед удалением сделайте автоматический бэкап базы, например с помощью плагина Clearfy Pro или другого надежного решения.
- Отключите удаление отзывов, если ваш магазин использует сторонние плагины для отзывов с другой структурой хранения — код нужно адаптировать.
- Для ускорения работы используйте транзиенты для кеширования результатов запроса ID отзывов, чтобы не нагружать базу при каждом запуске.
Сравнение способов удаления старых отзывов
| Метод | Плюсы | Минусы |
|---|---|---|
| Ручное удаление в админке | Просто, не требует кода | Невозможно автоматизировать, долго для больших объемов |
| WP-Cron с кастомным кодом (описанный способ) | Автоматизация, гибкость настройки | Зависит от корректной работы WP-Cron, требует базовых знаний PHP |
| Плагины для очистки базы (например Clearfy Pro) | Удобный интерфейс, доп. функции безопасности | Может быть платным, не всегда адаптирован под отзывы WooCommerce |