تابع wp_delete_post در وردپرس
تابع wp_delete_post() در وردپرس یکی از توابع کلیدی برای حذف پستها (نوشتهها، برگهها یا هر نوع پست تایپ سفارشی) از پایگاهداده است. این تابع معمولاً در زمانی استفاده میشود که بخواهید یک پست خاص را به صورت برنامهنویسی حذف کنید، نه از طریق پنل مدیریت وردپرس. در این آموزش به بررسی نحوه استفاده، پارامترها، مثالهای کاربردی و نکات مهم امنیتی این تابع میپردازیم.
کاربرد تابع wp_delete_post()
این تابع زمانی کاربرد دارد که بخواهید از طریق کد PHP، یک پست را حذف کنید. این میتواند در پلاگینها، قالبها یا اسکریپتهای اختصاصی مورد استفاده قرار گیرد. برای مثال، فرض کنید میخواهید هنگام حذف یک کاربر، تمام پستهای او را نیز حذف کنید. در چنین شرایطی wp_delete_post() بسیار مفید است.
ساختار کلی تابع
wp_delete_post( int $postid, bool $force_delete = false )پارامترها
- $postid – شناسه (ID) پست مورد نظر برای حذف.
- $force_delete – اگر مقدار
trueباشد، پست بهصورت دائمی از پایگاهداده حذف میشود. در غیر این صورت، ابتدا به زبالهدان (Trash) منتقل میشود.
مقدار بازگشتی
این تابع در صورت موفقیت، شیء (object) مربوط به پست حذفشده را برمیگرداند و در غیر این صورت مقدار false.
مثال ساده از حذف یک پست
$post_id = 45;
wp_delete_post( $post_id );
در این مثال، پست با شناسه 45 به زبالهدان منتقل میشود، زیرا پارامتر دوم تعیین نشده و مقدار پیشفرض آن false است.
حذف دائمی پست (بدون رفتن به زبالهدان)
$post_id = 45;
wp_delete_post( $post_id, true );
در این حالت، پست مستقیماً از پایگاهداده حذف میشود و دیگر در زبالهدان قابل بازیابی نخواهد بود. استفاده از true باید با احتیاط انجام شود.
تفاوت wp_delete_post() و wp_trash_post()
| تابع | عملکرد | قابلیت بازیابی |
|---|---|---|
wp_delete_post() | حذف پست (به صورت دائمی یا ارسال به زبالهدان) | بستگی به پارامتر $force_delete دارد |
wp_trash_post() | همیشه پست را به زبالهدان منتقل میکند | قابل بازیابی از زبالهدان |
بررسی منطق داخلی تابع
تابع wp_delete_post() در واقع از چندین فیلتر و اکشن داخلی استفاده میکند تا قبل و بعد از حذف پست، تغییرات لازم را در سایر بخشهای وردپرس اعمال کند. برای مثال:
do_action( 'before_delete_post', $postid );قبل از حذف پست اجرا میشود.do_action( 'deleted_post', $postid );بعد از حذف پست اجرا میشود.
با استفاده از این اکشنها، میتوان رفتار سفارشی هنگام حذف پست تعریف کرد.
مثال کاربردی: حذف همه پستهای یک دسته خاص
$category_id = 12;
$posts = get_posts( array(
'category' => $category_id,
'numberposts' => -1
) );
foreach ( $posts as $post ) {
wp_delete_post( $post->ID, true );
}
در این مثال، تمام پستهای دستهای با شناسه 12 به صورت دائمی حذف میشوند. این کد میتواند درون یک پلاگین یا فایل functions.php استفاده شود.
نکات امنیتی و بهترین روشها
- همیشه قبل از حذف پست بررسی کنید که کاربر فعلی مجوز حذف آن را دارد. برای این کار میتوانید از تابع
current_user_can('delete_post', $post_id)استفاده کنید. - از
$force_delete = trueفقط زمانی استفاده کنید که مطمئن هستید نیازی به بازیابی پستها نخواهید داشت. - پیشنهاد میشود قبل از حذف دائمی، پشتیبانگیری از دیتابیس انجام شود.
مثال با بررسی مجوز کاربر
$post_id = 78;
if ( current_user_can( 'delete_post', $post_id ) ) {
wp_delete_post( $post_id, false );
} else {
wp_die( 'شما مجوز حذف این پست را ندارید.' );
}
در این کد، ابتدا بررسی میشود که آیا کاربر فعلی مجوز حذف پست را دارد یا خیر. در صورت نداشتن مجوز، اسکریپت متوقف شده و پیغام خطا نمایش داده میشود.
حذف گروهی پستها بر اساس نوع پست (Post Type)
$args = array(
'post_type' => 'product',
'post_status' => 'publish',
'numberposts' => -1
);
$posts = get_posts( $args );
foreach ( $posts as $post ) {
wp_delete_post( $post->ID, true );
}
در این مثال، تمام پستهای منتشرشده از نوع product (مثلاً در ووکامرس) حذف میشوند.
استفاده از wp_delete_post() در اکشنها و هوکها
گاهی لازم است هنگام وقوع رویداد خاصی، یک پست به صورت خودکار حذف شود. برای مثال، هنگام حذف یک کاربر خاص:
add_action( 'delete_user', 'delete_user_posts' );
function delete_user_posts( $user_id ) {
$posts = get_posts( array(
'author' => $user_id,
'numberposts' => -1
) );
foreach ( $posts as $post ) {
wp_delete_post( $post->ID, true );
}
}
در این قطعه کد، هر زمان کاربری حذف شود، تمامی پستهای او نیز از پایگاهداده پاک خواهند شد.
خطاهای رایج هنگام استفاده از wp_delete_post()
- فراموش کردن بررسی وجود پست قبل از حذف (بهتر است از
get_post()استفاده شود). - استفاده از
trueبدون نیاز واقعی و از بین بردن امکان بازیابی. - نادیده گرفتن مجوزهای کاربر و حذف ناخواسته دادهها.
نمونه کد بهبودیافته
$post_id = 99;
$post = get_post( $post_id );
if ( $post && current_user_can( 'delete_post', $post_id ) ) {
wp_delete_post( $post_id, false );
} else {
error_log( 'Failed to delete post ID: ' . $post_id );
}
این نسخه مطمئن میشود که پست وجود دارد و کاربر مجاز به حذف آن است. در غیر این صورت، پیغام خطا در فایل لاگ ثبت میشود.
جمعبندی کاربردی
wp_delete_post()ابزاری قدرتمند برای حذف پستها به صورت برنامهنویسی است.- پارامتر
$force_deleteتعیینکننده حذف دائمی یا ارسال به زبالهدان است. - برای امنیت و جلوگیری از حذف ناخواسته دادهها، بررسی مجوز کاربر و وجود پست ضروری است.
- میتوانید از این تابع در پلاگینها، قالبها یا اکشنهای وردپرس برای حذف خودکار محتوا استفاده کنید.
آیا این مطلب برای شما مفید بود ؟




