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

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

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

Удаление спама вручную — утомительный и времязатратный процесс. Особенно если ваш сайт популярен и комментарии оставляют активно. Автоматизация помогает:

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

Существуют популярные плагины, например, Akismet или Antispam Bee, но иногда хочется полного контроля или добавления уникальных условий удаления. В этом случае создание собственного плагина — оптимальное решение.

Основы создания плагина для автоматического удаления спама в WordPress

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

Начнем с создания базового плагина. Для этого создайте папку wpcheck-spam-cleaner в директории wp-content/plugins и файл wpcheck-spam-cleaner.php внутри нее.

<?php
/**
 * Plugin Name: WPCheck Spam Cleaner
 * Description: Автоматическое удаление спам-комментариев старше 7 дней.
 * Version: 1.0
 * Author: WPCheck
 */

// Код плагина будет здесь

Регистрация события для автоматического удаления спама

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

function wpcheck_delete_old_spam_comments() {
    global $wpdb;
    $days = 7;
    $date_threshold = date('Y-m-d H:i:s', strtotime("-{$days} days"));
    
    // Получаем ID спам-комментариев старше 7 дней
    $spam_comment_ids = $wpdb->get_col($wpdb->prepare(
        "SELECT comment_ID FROM {$wpdb->comments} WHERE comment_approved = 'spam' AND comment_date < %s",
        $date_threshold
    ));

    if (!empty($spam_comment_ids)) {
        foreach ($spam_comment_ids as $comment_id) {
            wp_delete_comment($comment_id, true); // Полное удаление
        }
    }
}

// Планируем задачу при активации плагина
function wpcheck_schedule_spam_cleanup() {
    if (!wp_next_scheduled('wpcheck_daily_spam_cleanup')) {
        wp_schedule_event(time(), 'daily', 'wpcheck_daily_spam_cleanup');
    }
}
add_action('wp', 'wpcheck_schedule_spam_cleanup');

// Привязываем функцию удаления к событию
add_action('wpcheck_daily_spam_cleanup', 'wpcheck_delete_old_spam_comments');

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

Улучшение плагина: настройки и безопасность

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

Добавление страницы настроек

Используем стандартные возможности WordPress для создания меню и сохранения опций.

function wpcheck_spam_cleaner_menu() {
    add_options_page(
        'WPCheck Spam Cleaner Настройки',
        'Spam Cleaner',
        'manage_options',
        'wpcheck-spam-cleaner',
        'wpcheck_spam_cleaner_settings_page'
    );
}
add_action('admin_menu', 'wpcheck_spam_cleaner_menu');

function wpcheck_spam_cleaner_settings_page() {
    if (!current_user_can('manage_options')) {
        wp_die('Недостаточно прав для доступа к этой странице.');
    }

    // Обработка сохранения настроек
    if (isset($_POST['wpcheck_spam_days'])) {
        $days = intval($_POST['wpcheck_spam_days']);
        if ($days > 0) {
            update_option('wpcheck_spam_days', $days);
            echo '<div class="updated">Настройки сохранены.</div>';
        } else {
            echo '<div class="error">Введите корректное значение.</div>';
        }
    }

    $current_days = get_option('wpcheck_spam_days', 7);
    ?>
    <div class="wrap">
        <h1>Настройки WPCheck Spam Cleaner</h1>
        <form method="post" action="">
            <label for="wpcheck_spam_days">Удалять спам старше (дней):</label><br>
            <input type="number" id="wpcheck_spam_days" name="wpcheck_spam_days" value="<?php echo esc_attr($current_days); ?>" min="1" /><br><br>
            <input type="submit" class="button-primary" value="Сохранить" />
        </form>
    </div>
    <?php
}

Обновление функции удаления для учета настройки

Теперь функция удаления будет использовать сохраняемое значение дней из настроек.

function wpcheck_delete_old_spam_comments() {
    global $wpdb;
    $days = get_option('wpcheck_spam_days', 7);
    $date_threshold = date('Y-m-d H:i:s', strtotime("-{$days} days"));

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

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

Дополнительные советы по борьбе со спамом в комментариях WordPress

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

  • Используйте плагины антиспама, например, Akismet, чтобы минимизировать попадание спама;
  • Включайте модерацию комментариев — требует ручного одобрения новых комментариев;
  • Добавляйте капчу для защиты формы комментариев от ботов;
  • Ограничивайте ссылки в комментариях, так как спамеры часто добавляют много ссылок;
  • Регулярно обновляйте WordPress и плагины для обеспечения безопасности;
  • Настройте уведомления и регулярно проверяйте журнал спама.

Комбинируя эти подходы с нашим плагином, вы добьетесь максимальной эффективности в борьбе со спамом.

Заключение

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

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
Как удалить неиспользуемые метаданные в WooCommerce для ускорения сайта
03.05.2026
Диагностика и решение проблемы с неработающими webhook в WooCommerce
24.06.2026
Автоматическое заполнение метаданных товаров WooCommerce при импорте CSV
04.06.2026
Как установить ограничения на размер загружаемых файлов в WordPress
29.03.2026
Как использовать WooCommerce REST API для управления заказами: практическое руководство
30.04.2026
×

AI-плагин

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

SEO и мета-теги

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

Изображения

Комментарии

Подробнее