خب، برنامهنویسهای عزیز، تا حالا شده یه فروشگاه ووکامرسی بزرگ داشته باشین که اینقدر سفارشات قدیمی داشته باشه که سایتتون مثل لاکپشت راه بره؟ یا سرور عزیزتون از خجالت کرش کنه؟ یکی از مشتری های ما هم هر سال تو همین چاله سیر می کنه و باید سفارشات قدیمی رو هر سال براشون پاک میکردم. پاک کردن دستی سفارشات خیلی خیلی کار سختیه! چون اول به سطل زباله منتقل میشن و بعد باید از سطل زباله پاکشون کرد. حالا اگر بیش از 100 هزار سفارش باشه چی ؟ پس همه راهحلهای تو اینترنت رو گشتم و از برآیند کدهای تو اینترنت که هیچکدوم یا کار نمی کردن یا سرور رو دان می کردن… به یه کد خفن رسیدم که هم سرور بیچارهتون زنده میمونه و هم سفارشات پاک میشن. تو این مقاله قراره این کد طلایی رو باهاتون به اشتراک بذارم.
کد جادویی پاک کردن سفارشات ووکامرس یکجا
اینجا اون کدی رو میبینین که برای پاک کردن دستهای سفارشات قدیمی توسعه دادم. با این کد میتونید به راحتی سفارشات قدیمی رو حذف کنید بدون اینکه فشار زیادی به سرور وارد بشه:
// اضافه کردن تابع برای حذف دستهای سفارشات
add_action('admin_footer', 'trn_auto_trash_all_orders');
function trn_auto_trash_all_orders() {
// گرفتن همه سفارشات تکمیل شده (یا هر وضعیت دیگهای که نیاز دارید)
$orders = wc_get_orders(array(
'limit' => 1500, // این عدد تعیین میکنه چند تا سفارش در هر دور حذف بشن
'status' => 'any', // میتونید وضعیت سفارشات رو اینجا تغییر بدید
));
if (count($orders) > 0) {
foreach ($orders as $order) {
$order->delete(true); // حذف سفارشها به صورت اجباری
}
// بارگذاری دوباره صفحه بعد از ۵ ثانیه تا عملیات پیوسته انجام بشه
echo '<script>setTimeout(function(){ location.reload(); }, 5000);</script>';
} else {
// پیام به مدیر که همه سفارشات حذف شدن
echo '<script>alert("همه سفارشات پاک شدن!");</script>';
}
}
توضیحات تخصصی (از برنامهنویس به برنامهنویس)
خب بریم سراغ این که این کد چه کار میکنه و چطور میتونید ازش استفاده کنید:
- تعریف اکشن توی فوتر مدیریت:
همونطور که میدونین، اکشنهای وردپرس قلب تپنده این سیستم هستن. اینجا ما داریم یه اکشن تویadmin_footer
میذاریم. یعنی هر وقت پنل مدیریت رو باز کنین، این کد اجرا میشه. ایده اینه که هر وقت دارید توی مدیریت بچرخید، این کد به صورت خودکار اجرا بشه. - گرفتن سفارشات با تابع
wc_get_orders
:
اینجا داریم سفارشات رو با وضعیت خاصی میگیریم (تکمیلشده، معلق و غیره). کلید ماجرا اینه که با استفاده از پارامترlimit
، تعیین میکنیم که در هر اجرا چند سفارش پاک بشه. در این مثال 1500 تاست، ولی شما میتونید اونو کم و زیاد کنید، بسته به حجم سفارشات و توان سرورتون. - حذف اجباری سفارشات با متد
delete(true)
:
اینجا داریم سفارشات رو به صورت کامل و اجباری از دیتابیس حذف میکنیم. به جای اینکه به زبالهدان منتقل بشن، کلاً پاک میشن. باtrue
به وردپرس میگیم که دیگه رد خور نداره و مستقیم باید پاک بشه. - بارگذاری دوباره صفحه با
setTimeout
:
برای اینکه عملیات حذف ادامهدار بشه، از جاوا اسکریپت استفاده کردیم تا بعد از ۵ ثانیه صفحه دوباره بارگذاری بشه. این کار به شما اجازه میده که به تدریج و بدون دخالت دستی، تعداد زیادی سفارش رو پاک کنید. - پیام برای مدیر:
بعد از اینکه همه سفارشات پاک شدن، یه پیام خوشحالکننده برای مدیر سایت میاد: “همه سفارشات پاک شدن!”، یعنی دیگه هیچ سفارش قدیمی باقی نمونده.
چرا این روش بهترین راهحله؟
توی دنیای اینترنت پره از راهحلهایی که برای پاک کردن سفارشات معرفی شدن، ولی یا خیلی پیچیده هستن یا سرورتون رو به فنا میدن. بعد از کلی جستجو توی سایتهای انگلیسی و فارسی و به اضافه تجربه خودم به این کد رسیدم که هم سادهست، هم انعطافپذیر و هم سرورتون رو نجات میده. نیازی نیست خودتون رو با اسکریپتهای سنگین و روشهای پیچیده اذیت کنید. این روش کمکم و به صورت دستهای سفارشات رو پاک میکنه، بدون اینکه سرورتون کرش کنه یا سایتتون از دسترس خارج بشه.
جمعبندی
اگر میخواین سفارشات قدیمی ووکامرس رو حذف کنید و از شر اونها راحت بشین بدون اینکه سایتتون کرش کنه یا سرورتون فشار بیاره، این کد بهترین دوست شماست. با اجرای تدریجی و خودکار، به سادگی میتونید فروشگاه ووکامرسی خودتون رو مدیریت کنید. برنامهنویسهای عزیز، از این کد استفاده کنید و خیالتون راحت باشه که این راهحل بهترینه! 😎
1 دیدگاه دربارهٔ «پاک کردن سفارشات قدیمی ووکامرس به روش خودکار، بدون فشار به سرور!»
آقا مرسی این خیلی به کارم اومد🫡