کاربران اسپم (مثل ثبتنامهای رباتی با نقش 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
یه تجربه از خودم: تو یه سایت خبری، کلی کاربر اسپم داشتم که دیتابیس رو پر کرده بودن. این اسکریپت تو چند روز کلشون رو پاک کرد بدون اینکه به سرور فشار بیاد!
