wpmoney.ru wordpress WP Money

Автоматическое удаление отзывов WooCommerce со статусом «На модерации»

Проблема: накапливаются неактивные отзывы со статусом «На модерации»

В интернет-магазинах WooCommerce отзывы часто требуют модерации, и если администратор не успевает их обработать, очередь «на модерации» растёт, забивая базу данных. Это замедляет работу сайта и усложняет администрирование. Автоматическое удаление таких отзывов через определённый срок решит проблему.

Диагностика проблемы

Чтобы проверить, сколько отзывов находятся в статусе «на модерации», выполните SQL-запрос к базе данных WordPress:

SELECT COUNT(*) FROM wp_comments WHERE comment_approved = '0' AND comment_type = 'review';

Здесь comment_approved = '0' означает, что отзыв не одобрен (в ожидании модерации), а comment_type = 'review' фильтрует именно отзывы WooCommerce.

Если число отзывов на модерации велико (например, более 100), это повод настроить автоматическое удаление.

Пошаговое решение: автоматическое удаление старых отзывов на модерации

1. Создаём функцию для удаления отзывов старше N дней

Добавьте следующий код в файл functions.php вашей дочерней темы или в отдельный плагин:

function wpmoney_delete_old_pending_reviews() {
    global $wpdb;
    $days = 30; // количество дней для хранения отзывов на модерации
    $date_threshold = date('Y-m-d H:i:s', strtotime("-{$days} days"));

    // Получаем ID отзывов на модерации старше $days
    $comments_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($comments_to_delete)) {
        foreach ($comments_to_delete as $comment_id) {
            wp_delete_comment($comment_id, true); // true — без возможности восстановления
        }
    }
}

2. Запускаем функцию по расписанию с помощью WP-Cron

Добавьте код для планирования задачи ежесуточно:

// Регистрируем событие при активации темы или плагина
if (!wp_next_scheduled('wpmoney_daily_delete_pending_reviews')) {
    wp_schedule_event(time(), 'daily', 'wpmoney_daily_delete_pending_reviews');
}

// Хук для выполнения удаления
add_action('wpmoney_daily_delete_pending_reviews', 'wpmoney_delete_old_pending_reviews');

// Удаляем событие при деактивации плагина или темы
function wpmoney_deactivate_cleanup() {
    $timestamp = wp_next_scheduled('wpmoney_daily_delete_pending_reviews');
    if ($timestamp) {
        wp_unschedule_event($timestamp, 'wpmoney_daily_delete_pending_reviews');
    }
}
// Зарегистрируйте вызов wpmoney_deactivate_cleanup() при деактивации плагина или темы

Проверка результата

  • Выполните SQL-запрос из раздела диагностики до и после запуска задачи, чтобы убедиться, что старые отзывы удалены.
  • Проверьте логи WP-Cron (например, с помощью плагина WP Crontrol) на факт выполнения задачи.
  • Проверьте, что новые отзывы с статусом «на модерации» создаются и не удаляются раньше срока.

Частые ошибки и как их исправить

  • Функция wp_schedule_event не запускается: убедитесь, что ваш сайт посещают пользователи — WP-Cron запускается при заходе на сайт. Для теста можно вызвать функцию вручную.
  • Удаляются все отзывы, включая одобренные: проверьте условие comment_approved = '0' и comment_type = 'review', чтобы фильтровать только нужные комментарии.
  • Проблемы с правами доступа к базе данных: используйте объект $wpdb для корректных запросов и убедитесь, что пользователь базы данных имеет права SELECT и DELETE.

Практические советы по производительности и безопасности

  • Раз в месяц проверяйте размер таблицы wp_comments и оптимизируйте её с помощью OPTIMIZE TABLE wp_comments.
  • Не устанавливайте слишком короткий срок хранения отзывов на модерации, чтобы не потерять новые отзывы из-за задержек в модерации.
  • Для безопасности используйте wp_delete_comment вместо прямого SQL DELETE — это удалит все связанные метаданные и обеспечит целостность данных.
  • Если у вас большой трафик, рассмотрите запуск задачи через системный cron, отключив WP-Cron и настроив внешнее расписание для более стабильного выполнения.

Сравнение методов удаления отзывов

МетодПлюсыМинусы
WP-Cron + wp_delete_comment (код)Гибкость, безопасность, интеграция с WordPressЗависит от трафика, требует знаний PHP
SQL DELETE напрямуюБыстрая массовая очисткаРиск повреждения данных, не удаляет метаданные
Плагины очистки базыУдобство, готовые интерфейсыДополнительная нагрузка, возможны конфликты
×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее