Как автоматически удалять старые комментарии с блокировкой в WordPress

Вопрос автоматического удаления старых комментариев часто встает у владельцев сайтов на WordPress, особенно если комментарии становятся неактуальными или негативно влияют на производительность базы данных. В этой статье мы разберем, как реализовать автоматическую очистку старых комментариев с дополнительной проверкой их блокировки (статуса «спам» или «ожидает модерации»).

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

Комментарии, которые долго остаются в статусе «ожидает модерации» или помечены как «спам», не только загромождают базу данных, но и могут негативно влиять на скорость загрузки страниц и SEO. Такие комментарии не несут смысловой нагрузки и лишь увеличивают нагрузку на сервер.

Удаление таких комментариев позволяет:

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

В следующих разделах мы рассмотрим, как настроить автоматическое удаление таких комментариев с помощью кода и плагинов.

Как настроить автоматическое удаление старых комментариев с помощью WP-Cron

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

Создание функции для удаления комментариев

Ниже пример функции, которая удаляет комментарии в статусах «спам» и «ожидает модерации», старше 30 дней:

function wponline_delete_old_blocked_comments() {
    global $wpdb;
    $days = 30;
    $date_limit = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));

    // Статусы, которые хотим удалить
    $statuses = array('spam', 'hold');

    $placeholders = implode(',', array_fill(0, count($statuses), '%s'));

    // Получаем ID комментариев для удаления
    $comment_ids = $wpdb->get_col($wpdb->prepare(
        "SELECT comment_ID FROM {$wpdb->comments} WHERE comment_approved IN ($placeholders) AND comment_date < %s",
        ...$statuses, $date_limit
    ));

    if (!empty($comment_ids)) {
        foreach ($comment_ids as $comment_id) {
            wp_delete_comment($comment_id, true); // true - удаление навсегда
        }
    }
}

Регистрация задачи в WP-Cron

Добавим событие, которое будет запускать функцию раз в сутки:

function wponline_schedule_delete_old_blocked_comments() {
    if (!wp_next_scheduled('wponline_daily_delete_old_comments')) {
        wp_schedule_event(time(), 'daily', 'wponline_daily_delete_old_comments');
    }
}
add_action('wp', 'wponline_schedule_delete_old_blocked_comments');
add_action('wponline_daily_delete_old_comments', 'wponline_delete_old_blocked_comments');

Этот код можно добавить в файл functions.php вашей темы или создать небольшой плагин для удобства.

Использование плагинов для автоматической очистки комментариев

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

  • Clearfy Pro — мощный плагин оптимизации сайта, в том числе умеет удалять старые комментарии по расписанию. Подробнее на wpshop.ru.
  • WP Bulk Delete — позволяет удалять комментарии по различным условиям, включая дату и статус. Можно планировать задачи через WP-Cron.
  • Delete Pending Comments — простой плагин для удаления комментариев в статусе ожидания.

Настройка плагина обычно сводится к выбору условий удаления и расписания. Рекомендуется сначала протестировать на резервной копии сайта.

Как модифицировать функцию для удаления с сохранением важных комментариев

Иногда нужно удалять старые заблокированные комментарии, но сохранять, например, комментарии от определенных пользователей или с определенными ключевыми словами.

Для этого можно расширить функцию:

function wponline_delete_old_blocked_comments_filtered() {
    global $wpdb;
    $days = 30;
    $date_limit = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));
    $statuses = array('spam', 'hold');
    $exclude_users = array(1, 2); // ID пользователей, комментарии которых не удалять

    $placeholders = implode(',', array_fill(0, count($statuses), '%s'));

    $comment_ids = $wpdb->get_col($wpdb->prepare(
        "SELECT comment_ID, user_id FROM {$wpdb->comments} WHERE comment_approved IN ($placeholders) AND comment_date < %s",
        ...$statuses, $date_limit
    ));

    if (!empty($comment_ids)) {
        foreach ($comment_ids as $key => $comment_id) {
            $user_id = $wpdb->get_var($wpdb->prepare(
                "SELECT user_id FROM {$wpdb->comments} WHERE comment_ID = %d",
                $comment_id
            ));
            if (!in_array($user_id, $exclude_users)) {
                wp_delete_comment($comment_id, true);
            }
        }
    }
}

Эта доработка позволит избежать удаления комментариев от важных пользователей.

Рекомендации по безопасности и тестированию

Перед внедрением автоматического удаления комментариев обязательно сделайте резервную копию базы данных. Проверьте работу кода на тестовом сайте. Убедитесь, что удаляются только нужные комментарии.

Если вы используете плагины, внимательно читайте отзывы и обновляйте их своевременно. Некоторые плагины могут конфликтовать с другими или вызывать ошибки при обновлениях WordPress.

Также рекомендуется периодически проверять логи ошибок и работоспособность сайта после запуска автоматической очистки.

Как удалить старые вариации товаров в WooCommerce с помощью кода
05.05.2026
Как добавить удалённую отладку в WordPress
29.03.2026
Автоматическое удаление неактивных пользователей в WordPress
27.12.2025
Как создать автоматический импорт продукции в WooCommerce
09.04.2026
Оптимизация базы данных WordPress: удаляем старые ревизии и ускоряем сайт
13.11.2025