تابع wp_delete_user در وردپرس
تابع wp_delete_user() در وردپرس برای حذف یک کاربر از پایگاه داده استفاده میشود. این تابع امکان حذف کاربر بهتنهایی یا حذف همراه با پستها و محتواهای مرتبط یا واگذاری آنها به کاربر دیگر را فراهم میکند. در این مقاله به شکل دقیق، کاربردها، نکات ایمنی، مثالهای عملی و شیوهٔ استفاده در کد سفارشی خواهیم پرداخت.
پارامترها و مقدار بازگشتی
| پارامتر | نوع | توضیح |
|---|---|---|
| user_id | int | شناسهٔ عددی کاربری که قرار است حذف شود. |
| reassign | int|null | در صورت تعیین یک شناسهٔ کاربر دیگر، پستها به آن کاربر واگذار میشوند. در صورت null، پستها حذف میشوند. |
پاسخ تابع معمولاً به شکل boolean (true برای موفقیت و false برای شکست) بازمیگردد. همچنین برخی فرایندهای داخلی ممکن است خطاهای دیگری تولید کنند که بهتر است با روشهای کنترلی بررسی شوند.
رفتار با محتواهای مرتبط (پست، پیوست، متا)
- اگر پارامتر reassign مقداردهی شود، پستها و نوشتههایی که به کاربر تعلق دارند به کاربر جدید واگذار میشوند.
- اگر reassign برابر null باشد، پستها حذف خواهند شد؛ پیوستها (attachments) نیز که در حقیقت نوعی پست هستند تحت همان رفتار قرار میگیرند.
- اطلاعات متای کاربر (usermeta) و نقش کاربری از دیتابیس پاک میشود.
نکات امنیتی و پیشنیازها
- همیشه قبل از حذف کاربر، از بکاپ دیتابیس اطمینان حاصل کنید.
- بررسی قابلیتها با current_user_can(‘delete_users’) یا بررسی نقشهای مناسب ضروری است.
- هنگام فراخوانی از رابطهای مدیریتی یا AJAX حتماً nonce و بررسی referer را اضافه کنید.
مثال پایه: حذف یک کاربر و حذف پستها
if ( current_user_can( 'delete_users' ) ) {
$user_id = 42;
$deleted = wp_delete_user( $user_id ); // reassign=null -> پستها حذف میشوند
if ( $deleted ) {
// موفق
} else {
// شکست
}
}توضیح: در این مثال ابتدا بررسی میکنیم کاربر جاری اجازهٔ حذف کاربران را داشته باشد. سپس با فراخوانی wp_delete_user کاربر با شناسهٔ 42 حذف میشود. چون پارامتر دوم ارسال نشده، پستهای آن کاربر نیز حذف میشوند.
مثال: حذف کاربر و واگذاری پستها به مدیر سایت
$user_to_delete = 55;
$admin_id = 1; // فرض: شناسهٔ مدیر سایت
if ( current_user_can( 'delete_users' ) ) {
$result = wp_delete_user( $user_to_delete, $admin_id );
if ( $result ) {
// عملیات موفق
} else {
// مدیریت خطا
}
}توضیح: در این نمونه پستهای کاربر 55 به کاربر با شناسهٔ 1 واگذار میشود و خود کاربر حذف خواهد شد. این روش زمانی مناسب است که نمیخواهیم محتوای سایت پاک شود، بلکه فقط مالکیت آن تغییر کند.
به کارگیری در AJAX با امنیت
// فایل PHP که به AJAX متصل است
add_action( 'wp_ajax_my_delete_user', 'my_delete_user_ajax' );
function my_delete_user_ajax() {
if ( ! current_user_can( 'delete_users' ) ) {
wp_send_json_error( 'no_permission' );
}
check_ajax_referer( 'del_user_nonce', 'security' );
$user_id = intval( $_POST['user_id'] );
$reassign = isset( $_POST['reassign'] ) ? intval( $_POST['reassign'] ) : null;
$result = wp_delete_user( $user_id, $reassign );
if ( $result ) {
wp_send_json_success();
} else {
wp_send_json_error( 'delete_failed' );
}
}توضیح: این کد نمونهٔ راهاندازی یک endpoint AJAX امن برای حذف کاربر است. ابتدا اجازهٔ کاربر بررسی میشود، سپس nonce اعتبارسنجی میگردد، و نهایتاً تابع wp_delete_user صدا زده میشود. خروجی JSON به کلاینت برگشت داده میشود تا در رابط مدیریتی واکنش مناسب نشان داده شود.
حذف دستهای کاربران (مثال عملی)
$users_to_remove = array(10, 23, 37);
foreach ( $users_to_remove as $uid ) {
if ( $uid && current_user_can( 'delete_users' ) ) {
$ok = wp_delete_user( $uid, 1 ); // واگذاری به ادمین 1
if ( ! $ok ) {
error_log( "Failed to delete user $uid" );
}
}
}توضیح: این الگو برای حذف چند کاربر به صورت برنامهای استفاده میشود. در صورت بروز خطا آن را در لاگ ثبت میکنیم. دقت کنید برای عملیات دستهای حتماً از مکانیزمهای rate limit و بکاپ استفاده شود تا ریسک خرابی داده کاهش یابد.
هوکها و توسعهپذیری
- قبل و بعد از حذف کاربر، اکشنهایی اجرا میشوند که میتوان به آنها متصل شد (مثلاً برای پاکسازی دیتای اختصاصی افزونه).
- اگر افزونه یا سیستم شما دادههایی خارج از usermeta ذخیره میکند، باید روی اکشنهای مناسب گوش کرده و آنها را پاک یا منتقل کنید.
موارد کاربرد و سناریوهای واقعی
- حذف اسپمرها یا کاربران غیر فعال پس از بررسی دستی یا با الگوریتمهای تشخیص.
- خروج کاربر و انتقال محتوای او به یک حساب حفظشده (مثلاً هنگام ترک یک نویسنده مهم).
- پاکسازی حسابهای تست یا شبیهسازی بعد از پایان محیط توسعه.
مشکلات رایج و راهحلها
- عدم حذف فایلهای آپلود شده: اگر میخواهید فایلهای رسانهای مرتبط هم پاک شوند، بررسی کنید که پیوستها واقعاً حذف شده یا در رسانه باقی ماندهاند؛ ممکن است نیاز باشد با wp_delete_attachment نیز کار کنید.
- وابستگیهای جانبی: برخی افزونهها دادههایی در جداول اختصاصی دارند که به حذف خودکار روی wp_delete_user واکنش نشان نمیدهند. از اکشنها برای پاکسازی دستی استفاده کنید.
نتیجهگیری
تابع wp_delete_user() ابزار قدرتمندی برای مدیریت کاربران در وردپرس است؛ اما به دلیل اثرات فراگیر (حذف یا انتقال پستها، متا و پیوستها) باید با احتیاط استفاده شود. همیشه قبل از حذف کاربران پشتیبان بگیرید، مجوزها و nonceها را بررسی کنید، و برای عملیات گسترده مکانیزمهای گزارشگیری و بازگشت را تعبیه نمایید.
آیا این مطلب برای شما مفید بود ؟




