Автоматическое удаление старых отзывов в WordPress: как настроить и реализовать

Ведение отзывов на сайте — важный элемент взаимодействия с пользователями, но со временем старые отзывы могут терять актуальность и даже негативно влиять на восприятие контента. В этой статье мы подробно рассмотрим, как автоматически удалять отзывы в WordPress, которые старше определённого срока, используя собственный код и готовые плагины. Это позволит поддерживать актуальность отзывов и оптимизировать базу данных.

Почему важно удалять старые отзывы в WordPress

Отзывы — это пользовательский контент, который часто остаётся на сайте годами. Но учитывая, что с течением времени информация меняется, а пользователи хотят видеть свежие мнения, старые отзывы не всегда полезны. Кроме того, большое количество устаревших отзывов увеличивает нагрузку на базу данных, замедляет работу сайта и усложняет модерирование.

Автоматизация удаления таких отзывов помогает:

  • Сохранять базу данных в оптимальном состоянии.
  • Облегчить модерацию и улучшить качество отзывов.
  • Повысить доверие посетителей за счёт актуальной информации.

Как определить, какие отзывы удалять: критерии и подходы

Для автоматического удаления нам нужно определиться с критериями, по которым отзывы считаются устаревшими. Обычно используют:

  • Возраст отзыва (например, старше 1 года).
  • Статус (например, только одобренные или только на модерации).
  • Наличие определённых ключевых слов или метаданных.

В большинстве случаев достаточно задать возраст отзыва — это простой и универсальный параметр.

Реализация автоматического удаления старых отзывов через WP-Cron

WP-Cron — стандартный механизм WordPress для запуска задач по расписанию. Создадим функцию, которая будет удалять отзывы старше заданного количества дней, и запустим её регулярно.

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

function wpcommunity_delete_old_comments() {
    $days = 365; // удалить отзывы старше 365 дней
    global $wpdb;

    $date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));

    // Получаем ID отзывов, которые нужно удалить
    $comments_to_delete = $wpdb->get_col($wpdb->prepare(
        "SELECT comment_ID FROM {$wpdb->comments} WHERE comment_date < %s AND comment_approved = 1",
        $date_threshold
    ));

    if (!empty($comments_to_delete)) {
        foreach ($comments_to_delete as $comment_id) {
            wp_delete_comment($comment_id, true); // true - удалить без возможности восстановления
        }
    }
}

Шаг 2. Добавляем задачу в WP-Cron

Теперь зарегистрируем событие, которое будет запускать нашу функцию, например, раз в сутки.

function wpcommunity_schedule_old_comments_cleanup() {
    if (!wp_next_scheduled('wpcommunity_daily_old_comments_cleanup')) {
        wp_schedule_event(time(), 'daily', 'wpcommunity_daily_old_comments_cleanup');
    }
}
add_action('wp', 'wpcommunity_schedule_old_comments_cleanup');

add_action('wpcommunity_daily_old_comments_cleanup', 'wpcommunity_delete_old_comments');

Шаг 3. Удаляем задачу при деактивации плагина или темы

function wpcommunity_unschedule_old_comments_cleanup() {
    $timestamp = wp_next_scheduled('wpcommunity_daily_old_comments_cleanup');
    if ($timestamp) {
        wp_unschedule_event($timestamp, 'wpcommunity_daily_old_comments_cleanup');
    }
}
register_deactivation_hook(__FILE__, 'wpcommunity_unschedule_old_comments_cleanup');

Использование готовых плагинов для удаления старых отзывов

Если вы предпочитаете использовать готовые решения, можно обратить внимание на плагины для очистки базы данных и управления комментариями:

  • Advanced Database Cleaner — позволяет удалять устаревшие отзывы и оптимизировать базу данных.
  • Delete Old Posts — плагин для удаления постов и комментариев по возрасту.

Для интеграции с WPCommunity можно использовать WPRemark — плагин для расширенного управления отзывами и их оценкой, который можно доработать для автоматического удаления.

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

Перед автоматическим удалением важно учитывать несколько моментов:

  • Всегда делайте резервные копии базы данных перед запуском скриптов удаления.
  • Проверяйте логи и результаты работы функций, чтобы избежать случайной потери важных данных.
  • Можно внедрить мягкое удаление — сначала переносить отзывы в черновики или в отдельную таблицу, а потом окончательно удалять.
  • Настраивайте уведомления или отчёты о проделанной работе — это поможет контролировать процесс.

Пример создания отчёта о удалённых отзывах

function wpcommunity_delete_old_comments_with_report() {
    $days = 365;
    global $wpdb;

    $date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));

    $comments_to_delete = $wpdb->get_col($wpdb->prepare(
        "SELECT comment_ID FROM {$wpdb->comments} WHERE comment_date < %s AND comment_approved = 1",
        $date_threshold
    ));

    $deleted_count = 0;

    if (!empty($comments_to_delete)) {
        foreach ($comments_to_delete as $comment_id) {
            if(wp_delete_comment($comment_id, true)) {
                $deleted_count++;
            }
        }
    }

    if ($deleted_count > 0) {
        error_log("WPCommunity: Удалено старых отзывов: {$deleted_count}");
    }
}

Заключение по теме

Автоматизация удаления старых отзывов в WordPress — важный шаг для поддержания актуальности пользовательского контента и оптимизации производительности сайта. Используя WP-Cron и собственные функции, вы можете гибко настраивать критерии и периодичность удаления. При желании — дополнить функционал готовыми плагинами или интеграциями, например, с WPRemark от WPSHOP.

Как использовать хуки WooCommerce для автоматического изменения стоимости товаров
24.05.2026
Как создать собственный метабокс в WordPress
06.11.2025
Как использовать хуки для оптимизации WordPress: практические советы и примеры
13.12.2025
Как создать автоматическую систему отзывов с подтверждением в WordPress
02.02.2026
Как создать автоматическую систему удаления нерабочих шорткодов в WordPress
08.03.2026

Задать вопрос о вордпресс, получить ответ - это все можно сделать в нашем сообществе WP. Сайт в данный момент в разработке, изучите ссылки ниже: