Диагностика проблемы: зачем удалять отзывы по времени
В интернет-магазинах на WooCommerce отзывы помогают формировать доверие, но старые отзывы могут стать неактуальными или содержать неверную информацию о товаре. Особенно это важно, если ассортимент быстро меняется, или товары обновляются. В таких случаях нужна автоматизация удаления отзывов старше определённого срока, например, 30 дней.
Стандартного функционала в WooCommerce или WordPress для автоматического удаления отзывов по дате нет. Решение требует кастомизации с помощью кода.
Пошаговое решение: как реализовать удаление отзывов старше 30 дней
Шаг 1. Добавляем WP-Cron задачу для автоматизации
Для регулярного удаления старых отзывов создадим задачу, которая будет запускаться раз в сутки. Добавим следующий код в файл functions.php вашей темы или в кастомный плагин:
if ( ! wp_next_scheduled( 'wc_delete_old_reviews_daily' ) ) {
wp_schedule_event( time(), 'daily', 'wc_delete_old_reviews_daily' );
}
add_action( 'wc_delete_old_reviews_daily', 'wc_delete_reviews_older_than_30_days' );
function wc_delete_reviews_older_than_30_days() {
global $wpdb;
$date_threshold = date( 'Y-m-d H:i:s', strtotime( '-30 days' ) );
$comments_to_delete = $wpdb->get_col( $wpdb->prepare(
"SELECT comment_ID FROM {$wpdb->comments} WHERE comment_type = 'review' AND comment_date < %s",
$date_threshold
) );
if ( ! empty( $comments_to_delete ) ) {
foreach ( $comments_to_delete as $comment_id ) {
wp_delete_comment( $comment_id, true );
}
}
}Шаг 2. Проверяем, что отзывы помечены как review
WooCommerce использует тип комментария review для отзывов к товарам, а не обычные комментарии. Это ключ к корректному выбору отзывов для удаления. Если у вас кастомный тип комментариев, замените comment_type = 'review' на ваш вариант.
Проверка результата после внедрения
Чтобы проверить, работает ли задача:
- Вручную создайте несколько отзывов с датами старше 30 дней (можно через базу или плагины для тестирования дат комментариев).
- Запустите функцию вручную, вызвав
wc_delete_reviews_older_than_30_days()из консоли WP-CLIwp eval 'wc_delete_reviews_older_than_30_days();'или добавьте вызов один раз вfunctions.php. - Проверьте, что старые отзывы удалились из админки (Комментарии - Отзывы) и с фронтенда.
- Убедитесь, что новые отзывы не удаляются.
Частые ошибки и как исправить
- Отзывы не удаляются: проверьте, что тип комментария
reviewдействительно используется. В базе данных в таблицеwp_commentsполеcomment_typeдолжно содержатьreview. - WP-Cron не запускается: стандартный WP-Cron запускается при посещении сайта. Для отладки используйте плагин WP Crontrol или запускайте крон вручную через WP-CLI.
- Удаление отзывов ведёт к ошибкам: убедитесь, что используете
wp_delete_comment()с параметромtrueдля полного удаления, включая метаданные.
Практические советы по безопасности и производительности
- Не запускайте удаление отзывов слишком часто. Один раз в сутки — оптимально.
- Для больших сайтов с тысячами отзывов используйте пакетную обработку по 100 отзывов за один запуск, чтобы избежать таймаута PHP.
- Перед удалением рекомендуем создать резервную копию базы данных.
- Для безопасности убедитесь, что код выполняется только в административной части или через WP-Cron, чтобы исключить запуск злоумышленниками.
Дополнительно: сравнение способов автоматического удаления отзывов
| Метод | Описание | Плюсы | Минусы |
|---|---|---|---|
| Плагин WP Crontrol + кастомный код | Настройка WP-Cron и кастомной функции удаления | Гибкость, контроль, бесплатное решение | Требует знаний PHP, ручная настройка |
| Пользовательский плагин автоматизации | Плагин с UI для настройки срока удаления отзывов | Удобство для администраторов без кода | Может нагружать сайт, зависимость от стороннего кода |
| Удаление вручную через базу данных | SQL-запросы для удаления старых отзывов | Быстро, без нагрузки на WP-Cron | Риски потери данных, требует опыт работы с базой |