wpmail.ru wordpress WP Mail

Как удалить все спам-комментарии в WordPress с помощью кода

Зачем удалять спам-комментарии вручную и через код

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

Самый простой способ — использовать админ-панель WordPress, перейдя в раздел «Комментарии» и выбрав все спам-комментарии для удаления. Однако при тысячах записей это неудобно и долго. В таких случаях на помощь приходит программный метод — написание собственного кода, который удалит все спам-комментарии за один запрос.

В этой статье мы рассмотрим, как с помощью PHP-функций и SQL-запросов удалить спам-комментарии, а также покажем пример функции, которую можно добавить в файл functions.php вашей темы или в отдельный плагин.

Как определить спам-комментарии в базе данных WordPress

Все комментарии в WordPress хранятся в таблице wp_comments. Статус комментария задаётся полем comment_approved. Для спама это значение — 'spam'. Таким образом, удалить спам-комментарии можно, выбрав записи с comment_approved = 'spam'.

Пример SQL-запроса, который удалит все спам-комментарии:

DELETE FROM wp_comments WHERE comment_approved = 'spam';

Однако простой запрос к базе данных не всегда безопасен. Лучше использовать функции WordPress, чтобы обработать удаление и связанные с комментариями данные (например, мета-комментарии и кэш).

Функция для удаления всех спам-комментариев через WordPress API

Ниже пример функции wpmail_delete_all_spam_comments(), которая удалит все спам-комментарии, используя встроенные функции WordPress. Это безопасный и рекомендуемый способ:

function wpmail_delete_all_spam_comments() {
    // Получаем все ID спам-комментариев
    $spam_comments = get_comments([
        'status' => 'spam',
        'fields' => 'ids',
        'number' => 0 // без лимитов
    ]);

    if (empty($spam_comments)) {
        return 'Спам-комментариев для удаления не найдено.';
    }

    foreach ($spam_comments as $comment_id) {
        wp_delete_comment($comment_id, true); // true — удаление без возможности восстановления
    }

    return count($spam_comments) . ' спам-комментариев успешно удалены.';
}

Эту функцию можно вызвать, например, через AJAX, WP-CLI или временно добавить в functions.php и вызвать по URL. Главное — удалить её после использования, чтобы не допустить случайных вызовов.

Пример вызова через WP-CLI

Если на сервере установлен WP-CLI, можно создать кастомную команду для удаления спам-комментариев:

if ( defined('WP_CLI') && WP_CLI ) {
    WP_CLI::add_command('wpmail-delete-spam', function() {
        $message = wpmail_delete_all_spam_comments();
        WP_CLI::success($message);
    });
}

После этого в терминале достаточно в корне сайта выполнить:

wp wpmail-delete-spam

Использование плагинов для массового удаления спама

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

  • WP Bulk Delete — позволяет массово удалять комментарии по статусу, включая спам.
  • Advanced Database Cleaner — оптимизирует базу, удаляя спам и мусорные данные.
  • Delete All Comments of Spam — специализированный плагин для удаления всех спам-комментариев одним кликом.

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

Советы по оптимизации и безопасности при работе с удалением спама

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

  • Перед удалением сделайте резервную копию базы данных.
  • Используйте функции WordPress для безопасного удаления, чтобы не повредить данные.
  • Удаляйте спам регулярно, чтобы база не разрасталась.
  • При больших объёмах данных делайте удаление партиями по 500–1000 комментариев, чтобы избежать превышения времени выполнения скрипта.

Пример удаления спама партиями:

function wpmail_delete_spam_comments_batch($batch_size = 500) {
    $spam_comments = get_comments([
        'status' => 'spam',
        'fields' => 'ids',
        'number' => $batch_size
    ]);

    if (empty($spam_comments)) {
        return 'Спам-комментариев для удаления не найдено.';
    }

    foreach ($spam_comments as $comment_id) {
        wp_delete_comment($comment_id, true);
    }

    return count($spam_comments) . ' спам-комментариев удалены в этой партии.';
}

Вызывайте эту функцию циклично, пока не удалите весь спам.

×
WPRemark
Внимание Внимание Внимание Внимание
-15%

на WPRemark плагин WordPress

Прокачай свой сайт! ⋙