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

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

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

Черновые комментарии — это комментарии, которые не были одобрены или отклонены, и они занимают место в базе данных. Если таких комментариев много, это может привести к:

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

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

Как определить черновые комментарии в WordPress

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

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

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

Регистрация задачи в functions.php

if (!wp_next_scheduled('wpcatalog_delete_old_pending_comments')) {
    wp_schedule_event(time(), 'daily', 'wpcatalog_delete_old_pending_comments');
}

add_action('wpcatalog_delete_old_pending_comments', 'wpcatalog_delete_old_pending_comments_function');

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

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

    if (!empty($comments)) {
        foreach ($comments as $comment_id) {
            wp_delete_comment($comment_id, true);
        }
    }
}

Этот код регистрирует ежедневное задание, которое удаляет все комментарии в статусе ожидания, старше 30 дней.

Дополнительные настройки и безопасность

Если на вашем сайте много комментариев, лучше удалять их партиями, чтобы избежать перегрузки сервера. Можно добавить ограничение, например, удалять по 50 комментариев за раз и запускать WP-Cron чаще.

Также убедитесь, что вы используете постоянный хук cron или системный cron, чтобы задачи не зависали (особенно на слабых хостингах).

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

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

  • WP Optimize — универсальный инструмент для очистки базы данных, включая удаление старых ожидающих комментариев. Подробнее о WP Optimize на WPSHOP
  • Delete Pending Comments — специализированный плагин для удаления комментариев в статусе «ожидает модерации» старше заданного срока.

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

Расширенный пример: уведомление администратора о удалении

Можно дополнить функцию удалением уведомления на email, чтобы администратор знал о выполненной очистке.

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

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

    $deleted_count = 0;

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

    if ($deleted_count > 0) {
        wp_mail(get_option('admin_email'), 'Очистка старых комментариев', "Удалено старых черновых комментариев: $deleted_count.");
    }
}

Это поможет держать администратора в курсе и вовремя реагировать, если что-то пойдет не так.

Выводы и рекомендации

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

Для сайта с каталогом товаров или контентом, где активна работа с комментариями, регулярная очистка улучшит скорость и удобство работы.

Как очистить базу данных WordPress от старых meta данных и оптимизировать сайт
13.03.2026
Как создать динамические шорткоды в WordPress: практическое руководство
15.11.2025
Автоматическое изменение стоимости товаров в WooCommerce при снижении остатка на складе
13.05.2026
Как удалить или изменить meta robots в WordPress для улучшения SEO
05.01.2026
Как удалить условие загрузки картинок в WordPress для оптимизации скорости
02.01.2026