کاربران اسپم (مثل ثبت‌نام‌های رباتی با نقش Subscriber) می‌تونن دیتابیس رو پر کنن و عملکرد رو کند کنن. کد زیر یه اسکریپت ساده‌ست که کاربران با نقش Subscriber رو به صورت دسته‌ای حذف می‌کنه.

ساخت اسکریپت حذف کاربران

یه فایل به اسم delete-spam-users.php تو ریشه وردپرس بسازید و این کد رو توش قرار بدید:

<?php
// اتصال به وردپرس
require_once('wp-load.php');

global $wpdb;
$batch_size = 1000; // هر بار ۱۰۰۰ کاربر

// خوندن offset از یه فایل برای مدیریت وضعیت
$offset_file = 'offset.txt';
if (file_exists($offset_file)) {
    $offset = (int) file_get_contents($offset_file);
} else {
    $offset = 0;
}

// گرفتن کاربران برای حذف
$users = $wpdb->get_col("
    SELECT u.ID 
    FROM {$wpdb->users} u 
    INNER JOIN {$wpdb->usermeta} um ON u.ID = um.user_id 
    WHERE um.meta_key = 'wp_capabilities' 
    AND um.meta_value LIKE '%\"subscriber\"%' 
    LIMIT $batch_size OFFSET $offset
");

// اگه کاربری برای حذف بود، حذفشون کن
if (!empty($users)) {
    $wpdb->query("DELETE FROM {$wpdb->users} WHERE ID IN (" . implode(',', $users) . ")");
    $wpdb->query("DELETE FROM {$wpdb->usermeta} WHERE user_id IN (" . implode(',', $users) . ")");
    
    // به‌روزرسانی offset برای اجرای بعدی
    $offset += $batch_size;
    file_put_contents($offset_file, $offset);
    
    // لاگ‌گیری برای مانیتور کردن
    error_log("Deleted " . count($users) . " subscribers. New offset: $offset");
} else {
    // اگه دیگه کاربری نمونده، پیامی ثبت کن
    error_log("No more subscribers to delete.");
    if (file_exists($offset_file)) {
        unlink($offset_file);
    }
}

استفاده از اسکریپت

برای اجرا، URL زیر رو تو مرورگر بزنید:

https://your-domain.com/delete-spam-users.php

هر بار که این URL رو فراخوانی کنید، ۱۰۰۰ کاربر با نقش Subscriber حذف می‌شن. برای خودکارسازی، یه Cron Job تنظیم کنید:

wget -q -O - https://your-domain.com/delete-spam-users.php >/dev/null 2>&1

یه تجربه از خودم: تو یه سایت خبری، کلی کاربر اسپم داشتم که دیتابیس رو پر کرده بودن. این اسکریپت تو چند روز کلشون رو پاک کرد بدون اینکه به سرور فشار بیاد!