Диагностика проблемы: зачем нужно автоматически удалять отзывы в WooCommerce
Магазины на WooCommerce часто сталкиваются с ситуацией, когда устаревшие отзывы теряют актуальность или влияют на восприятие товаров. Ручное удаление отзывов занимает время и неэффективно при большом объеме. Автоматизация удаления отзывов, которым больше определенного срока, упрощает администрирование и поддерживает актуальность информации.
Как реализовать автоматическое удаление отзывов по времени
Обзор подхода
Отзывы в WooCommerce – это комментарии к товарам с типом комментария review. Для удаления устаревших отзывов нужно периодически запускать скрипт, который найдет и удалит отзывы старше нужного срока.
Использование WP-Cron для регулярного запуска удаления
WP-Cron позволит запускать функцию очистки автоматически, без вашего вмешательства.
function wpstuff_schedule_review_cleanup() {
if ( ! wp_next_scheduled( 'wpstuff_daily_review_cleanup' ) ) {
wp_schedule_event( time(), 'daily', 'wpstuff_daily_review_cleanup' );
}
}
add_action( 'wp', 'wpstuff_schedule_review_cleanup' );
// Функция удаления отзывов старше 90 дней
function wpstuff_delete_old_reviews() {
global $wpdb;
$days = 90; // Период хранения отзывов в днях
$date_limit = 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_limit
) );
if ( ! empty( $old_reviews ) ) {
foreach ( $old_reviews as $comment_id ) {
wp_delete_comment( $comment_id, true ); // true - удаляем навсегда
}
}
}
add_action( 'wpstuff_daily_review_cleanup', 'wpstuff_delete_old_reviews' );Добавление опции для настройки срока хранения отзывов
Для удобства можно добавить настройку в админке, например через add_option и использовать её в коде:
add_option( 'wpstuff_review_retention_days', 90 );
function wpstuff_delete_old_reviews() {
global $wpdb;
$days = (int) get_option( 'wpstuff_review_retention_days', 90 );
$date_limit = date( 'Y-m-d H:i:s', strtotime( "-{$days} days" ) );
$old_reviews = $wpdb->get_col( $wpdb->prepare(
"SELECT comment_ID FROM $wpdb->comments
WHERE comment_type = 'review' AND comment_date < %s",
$date_limit
) );
if ( ! empty( $old_reviews ) ) {
foreach ( $old_reviews as $comment_id ) {
wp_delete_comment( $comment_id, true );
}
}
}Пошаговое руководство по внедрению
- Добавьте код функции и планировщика в файл
functions.phpактивной темы или создайте отдельный небольшой плагин. - Настройте период хранения отзывов, изменив значение в функции или добавив интерфейс для настройки в админке.
- Проверьте, что WP-Cron работает корректно (например, установите плагин WP Crontrol для мониторинга).
- Запустите функцию вручную для теста (через консоль WP-CLI или временный хук).
Как проверить, что автоматическое удаление работает
- Проверьте в базе данных таблицу
wp_commentsналичие отзывов старше установленного срока (с помощью phpMyAdmin или WP-CLI). - Запустите вручную функцию удаления (через вызов
do_action('wpstuff_daily_review_cleanup')в тестовом режиме). - Убедитесь, что отзывы удалились из интерфейса WooCommerce и базы данных.
- Проверьте логи ошибок сервера и WordPress на предмет сбоев при выполнении WP-Cron.
Частые ошибки и как их исправить
- WP-Cron не запускается: по умолчанию WP-Cron запускается при посещении сайта. Если трафика мало, задачи не выполняются. Решение – настроить системный cron на сервере для запуска
wp-cron.phpили использовать плагины типа WP Crontrol. - Удаление отзывов не происходит: проверьте правильность написания
comment_type– WooCommerce использует 'review'. Ошибка в названии приведет к пустому выбору. - Отзывы не удаляются навсегда: используйте
wp_delete_comment($id, true), иначе комментарии попадут в корзину. - Производительность: при большом объеме отзывов выборка и удаление могут нагружать базу. Разбейте удаление на части или добавьте ограничение по количеству удаляемых отзывов за один запуск.
Практические советы по безопасности и производительности
- Используйте параметр
trueвwp_delete_comment(), чтобы удалять отзывы без возможности восстановления, если вы уверены в автоматизации. - Для больших магазинов разбивайте удаление на порции, например, по 100 отзывов за запуск, чтобы избежать таймаутов.
- Проверяйте права пользователя или выполняйте скрипт только от имени администратора, если добавляете интерфейс управления.
- Для мониторинга работы используйте логи и уведомления, например, отправку email при ошибках.
Сравнение способов реализации автоматического удаления отзывов
| Метод | Плюсы | Минусы | Рекомендации |
|---|---|---|---|
| WP-Cron с пользовательским кодом | Гибкость, контроль, нет сторонних зависимостей | Зависит от посещаемости сайта, сложнее в настройке | Подходит для опытных разработчиков |
| Плагин с функцией удаления отзывов | Простота установки и настройки | Может быть избыточным, нагрузка на сайт | Для непрофессиональных пользователей |
| Ручное удаление через SQL-запросы | Быстро, без нагрузки WP | Риск ошибок, требует доступа к базе и знаний SQL | Использовать только в крайнем случае |