Диагностика проблемы: зачем удалять старые отзывы WooCommerce
В интернет-магазинах на WooCommerce отзывы играют ключевую роль для повышения доверия покупателей. Однако со временем накапливаются устаревшие или нерелевантные отзывы, например, с багами или по товарам, которых давно нет в продаже. Это может негативно повлиять на восприятие магазина и SEO. Ручное удаление требует много времени. Практическое решение — настроить автоматическое удаление отзывов старше определённого срока с помощью WP-Cron.
Пошаговое решение: реализация автоматического удаления отзывов
1. Определяем критерии удаления
В нашем примере удаляем отзывы старше 365 дней (1 год). Можно изменить этот параметр под свои нужды.
2. Создаём функцию удаления отзывов
function delete_old_woocommerce_reviews() {
global $wpdb;
$days = 365; // количество дней
$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} c
INNER JOIN {$wpdb->posts} p ON c.comment_post_ID = p.ID
WHERE c.comment_date < %s
AND p.post_type = 'product'
AND c.comment_approved = '1'
AND c.comment_type = ''",
$date_threshold
));
if (!empty($old_reviews)) {
foreach ($old_reviews as $comment_id) {
wp_delete_comment($comment_id, true); // true — без возможности восстановления
}
}
}3. Регистрируем задачу WP-Cron
Добавляем событие, которое будет запускать функцию ежедневно.
add_action('delete_old_reviews_daily_event', 'delete_old_woocommerce_reviews');
function schedule_delete_old_reviews() {
if (!wp_next_scheduled('delete_old_reviews_daily_event')) {
wp_schedule_event(time(), 'daily', 'delete_old_reviews_daily_event');
}
}
add_action('wp', 'schedule_delete_old_reviews');4. Отмена задачи при деактивации плагина или темы
function clear_delete_old_reviews_schedule() {
$timestamp = wp_next_scheduled('delete_old_reviews_daily_event');
if ($timestamp) {
wp_unschedule_event($timestamp, 'delete_old_reviews_daily_event');
}
}
register_deactivation_hook(__FILE__, 'clear_delete_old_reviews_schedule');Проверка результата после внедрения
- Добавьте в базу тестовый отзыв с датой старше 365 дней (можно вручную через SQL, изменив поле
comment_date). - Запустите вручную функцию
delete_old_woocommerce_reviews()через WP-CLI или вызовите её в шаблоне для теста. - Проверьте, что отзыв удалён из базы (таблица
wp_comments) и на фронтенде. - Убедитесь, что cron-задание запускается — в админке можно использовать плагин WP Crontrol для мониторинга.
Частые ошибки и способы исправления
- Отзывы не удаляются: Проверьте, что в запросе правильно фильтруется
comment_type = ''— отзывы WooCommerce хранятся как обычные комментарии без типа. - Задача WP-Cron не запускается: Убедитесь, что на сайте есть трафик, иначе WP-Cron не срабатывает. Для надёжного запуска настройте системный cron на сервере.
- Удаляются не только отзывы: Проверьте условие
post_type = 'product'иcomment_approved = '1', чтобы исключить другие комментарии. - Ошибка прав доступа: Для выполнения
wp_delete_comment()требуется достаточный уровень прав, обычно функция вызывается в контексте сервера, а не пользователя.
Практические советы по безопасности и производительности
- Для больших магазинов с тысячами отзывов лучше удалять отзывы партиями, чтобы избежать перегрузки БД. Можно добавить лимит в SQL-запрос и запускать задание чаще.
- Перед массовым удалением рекомендуется сделать резервную копию базы данных.
- Используйте плагин Clearfy Pro (https://wpshop.ru/plugins/clearfy?utm_source=wpbusiness.ru&utm_medium=article&utm_campaign=kak-ispolzovat-kron-dlya-avtomaticheskogo-udalenija-staryh-otzyvov-woocommerce) для дополнительной очистки и оптимизации комментариев и отзывов.
- Для мониторинга cron-заданий и их состояния рекомендуем плагин WP Crontrol.
Сравнение вариантов реализации удаления старых отзывов
| Метод | Описание | Плюсы | Минусы |
|---|---|---|---|
| Плагин (например, WP Bulk Delete) | Использование готового решения для удаления отзывов по критериям | Простота настройки, UI для управления | Может быть избыточным, нагрузка при больших объёмах |
| WP-Cron с кастомным кодом | Автоматизация через собственный код, максимальный контроль | Гибкость, минимальная нагрузка при правильной настройке | Требует навыков разработки |
| SQL-запросы напрямую | Удаление отзывов через прямой запрос к базе | Очень быстро, можно делать любые выборки | Риск повредить данные, отсутствие логики WordPress |