تابع wp_delete_comment در وردپرس
تابع wp_delete_comment() یکی از توابع اصلی وردپرس برای حذف نظرات (comments) از پایگاه داده است. با این تابع میتوان یک نظر را بهصورت دائمی حذف کرد یا (در صورت پشتیبانی) آن را به سطل زباله منتقل نمود. در این مقاله عملکرد، پارامترها، موارد کاربرد، نکات امنیتی و چند مثال عملی را بهصورت کاربردی بررسی میکنیم.
معنی و وظیفه تابع
wp_delete_comment( $comment_id, $force_delete = false )
این تابع نظر با شناسه مشخص را حذف میکند. اگر $force_delete برابر true باشد، حذف دائمی انجام میشود؛ در غیر این صورت در شرایطی که «سطل زباله» برای کامنتها فعال است، ممکن است نظر بهصورت موقت به سطل زباله منتقل شود.
پارامترها و مقدار بازگشتی
| پارامتر | نوع | توضیح |
|---|---|---|
| $comment_id | int | شناسه (ID) نظر برای حذف |
| $force_delete | bool | اگر true باشد حذف دائم؛ اگر false و سطل زباله فعال باشد ممکن است به سطل منتقل شود |
مقدار بازگشتی تابع بسته به وضعیت اجرای وردپرس معمولاً مقدار true در صورت موفقیت و false در صورت خطا است (در برخی نسخهها ممکن است مقدار خالی یا دیگر مقادیر منطقی بازگردد). بهتر است بعد از فراخوانی نتیجه را بررسی کنید.
نکات مهم و امنیتی
- قبل از حذف یک نظر بهصورت برنامهنویسی، همواره چک کنید کاربر فعلی مجوز لازم را دارد (مثلاً current_user_can(‘edit_comment’, $comment_id) یا capability مناسب).
- حذف دائمی (force_delete = true) غیرقابل بازگشت است؛ از گرفتن نسخه پشتیبان یا لاگبرداری در عملیاتهای دستهای استفاده کنید.
- در عملیات دستهای روی تعداد بالای کامنتها از منابع سرور و زمان اجرا مطمئن شوید؛ در عملیات زیاد بهتر است از WP-CLI یا پردازشهای دستهای (batch) استفاده شود.
- اگر در سایت پلاگین یا عملکردی دارید که با متای نظر یا دادههای وابسته کار میکند، بررسی کنید که آن دادهها پس از حذف پاک یا مدیریت شده باشند.
هوکها (Hooks) مرتبط
وقتی یک نظر حذف یا به سطل زباله فرستاده میشود، وردپرس هوکهایی را اجرا میکند که میتوانید برای اجرای کد دلخواه به آن متصل شوید. دو هوک معمول:
- delete_comment — قبل از حذف واقعی اجرا میشود.
- deleted_comment — بعد از حذف اجرا میشود.
با استفاده از این هوکها میتوانید عملیات لاگ، حذف متای اضافی، پاکسازی فایلها یا ارسال اعلان انجام دهید.
مثال 1 — حذف یک نظر با شناسه مشخص
if ( current_user_can( 'edit_comment', $comment_id ) ) {
$deleted = wp_delete_comment( $comment_id, true ); // حذف دائمی
if ( $deleted ) {
// موفقیت
} else {
// خطا
}
}توضیح: در این نمونه ابتدا با current_user_can بررسی میکنیم که کاربر جاری اجازه ویرایش/مدیریت نظر را دارد، سپس با پارامتر دوم true حذف دائم را اجرا میکنیم. نتیجهٔ تابع بررسی شده و بسته به آن میتوانید پیام یا عملیات بعدی را اجرا کنید.
مثال 2 — حذف دستهای نظرات قدیمی یا اسپم
$args = array(
'status' => 'approve',
'date_query' => array(
array(
'before' => '6 months ago',
),
),
'number' => 0, // دریافت تمام نتایج
);
$comments = get_comments( $args );
foreach ( $comments as $comment ) {
// بررسی امنیتی اضافه اگر لازم است
wp_delete_comment( $comment->comment_ID, true );
}توضیح: این کد با get_comments نظرات تاییدشدهای که بیش از ۶ ماه از تاریخ آنها گذشته را واکشی کرده و همه را بهصورت دائمی حذف میکند. در سایتهای بزرگ از این سبک برای پاکسازی دورهای استفاده میشود، اما در صورت تعداد زیاد باید این کار را در پردازشهای زمانبندی شده (cron) یا با WP-CLI انجام دهید تا تایم اوت نشود.
مثال 3 — حذف بر اساس ایمیل یا نویسنده
$author_email = 'spam@example.com';
$comments = get_comments( array( 'author_email' => $author_email, 'number' => 0 ) );
foreach ( $comments as $c ) {
wp_delete_comment( $c->comment_ID, true );
}توضیح: با استفاده از آرگومان author_email نظرات یک ایمیل مشخص را پیدا و حذف میکنیم. این روش برای پاکسازی نظرات اسپم که توسط یک آدرس ایمیل ساخته شدهاند مفید است.
موارد کاربردی و توصیههای عملی
- پاکسازی اسپم و نظرات تکراری: ترکیب get_comments و wp_delete_comment روش مناسبی است.
- اتوماسیون مدیریتی: میتوانید با کرون وردپرس یا WP-Cron اسکریپتهایی بسازید تا خودکار نظرات قدیمی یا مشکوک حذف شوند.
- پلاگینها و افزونهها: هنگام نوشتن پلاگین که نظرات را دستکاری میکند، همیشه از هوکها استفاده کرده و دسترسیها را کنترل کنید.
- پشتیبانگیری: قبل از عملیات دستهای، تهیه بکآپ دیتابیس بهشدت توصیه میشود.
- برای عملیات گسترده و سریع، استفاده از WP-CLI معمولاً امنتر و سریعتر است (مثلاً wp comment delete <id> –force یا اسکریپت دستهای).
نکاتی درباره متادیتا و دادههای وابسته
وردپرس معمولاً متای نظر را همراه با حذف نظر نیز پاکسازی میکند، اما در صورتی که پلاگینی از جداول یا فایلهای جداگانهای استفاده میکند، لازم است آن پاکسازی را بهصورت دستی انجام دهید. برای اطمینان میتوانید در هوک deleted_comment تابعی بنویسید که متا یا داده جانبی را حذف کند.
نمونه ثبت هوک برای پاکسازی متا
add_action( 'deleted_comment', 'my_plugin_cleanup_comment_meta' );
function my_plugin_cleanup_comment_meta( $comment_id ) {
// حذف متای اختصاصی
delete_comment_meta( $comment_id, 'my_plugin_custom_meta' );
// عملیات جانبی دیگر
}توضیح: این کد روی هوک deleted_comment متصل شده و بعد از حذف موفق نظر متای اختصاصی مربوط به پلاگین را حذف میکند تا دادههای اضافی روی دیتابیس باقی نماند.
خلاصه و جمعبندی
تابع wp_delete_comment ابزار ساده و قدرتمندی برای حذف نظرات در وردپرس است. با رعایت اصول امنیتی (بررسی دسترسیها)، توجه به فرق حذف موقت و دائمی، و مدیریت دادههای وابسته میتوانید عملیات حذف را بهصورت مطمئن و مؤثر انجام دهید. برای عملیاتهای دستهای از روشهایی مثل WP-CLI یا پردازشهای زمانبندیشده استفاده کنید و همیشه قبل از عملیات گسترده از دیتابیس پشتیبان بگیرید.
آیا این مطلب برای شما مفید بود ؟




