با سلام خدمت برنامه نویسان
دوستان بنده قصد دارم شناسه سفارشی که در ووکامرس بعد از خرید محصول رو منحصر به فرد دارای پسوند و پیشوند کنم افزونه هایی هست custom-order-numbers-for-woocommerce و .. که میتونین فقط عدد بزارین قبل و بعد ولی من میخام به صورت پویا با شورت کد یا کد php اطلاعات دو تا فیلد فرم ثبت سفارش مثلا کد ملی طرف بیاد بچسبه به شناسه سفارشم که توی افزونه های شدنی نیست
راهی یا افزونه ای سراغ ندارین که مشکلمو حل کنه ؟؟؟
ممنون
سلام
@mehdimohseninia71
یه فیلتر بود به نام woocommerce_order_number ولی من تا حالا تستش نکردم
این کد رو میتونید داخل functions.php قالبتون قرار بدین
به این صورت استفاده میشه :
add_filter( 'woocommerce_order_number', 'change_woocommerce_order_number' );
function change_woocommerce_order_number( $order_id ) {
$prefix = 'DGK';
$suffix = 'PRO';
$order_id = str_ireplace("#", "", $order_id); //remove # before from order id
$new_order_id = $prefix . $order_id . $suffix;
return $new_order_id;
}
سلام @mehdi.mahdavi97
ممنون از راهنماییت
ولی خوب من میخام از فیلدهای بخش ثبت سفارشم دیتا رو واکشی کنم باید include کنم از فایل فرم ثبت سفارش ؟؟؟ تا از دیتای فیلدهاش به طور مثال کد ملیش استفاده کنم بعد این functions.php اصلا میشه include کرد دردسر نشه چون function.php حساس؟ چجوری میتونم متغییر پاس بدم به نظر شما؟
@mehdimohseninia71
خواهش میکنم
نیازی به include نیست ، شما داخل این فانکشن $order_id رو دارین پس میتونید اطلاعات سفارش رو بگیرین و از اطلاعات سفارش هم میتونید اطلاعات مشتری رو بدست بیارین
$order = new WC_Order($order_id);
@mehdi.mahdavi۹۷
ممنون از راهنماییت
نه ببین جواب نداد اون مثال شما که قطعه کدو دادی درسته بجای $prefix میخام داینامیک کد ملی رو از صورت حساب یا order بگیره که نیاز داره مثلا لیست order چیزی فراخونی بشه من حالا نمیدونم همچین لیستی هست یا نه شما توی تعریف اولیه تابع $order_id رو پاس دادین بقیه اطلاعاتشو چجوری باید به دست بیارم اصلا call شده یا نه. مثلا قطعه کد زیر که جواب نداده ولی منظورمو میتونم برسونم
function change_woocommerce_order_number( $order ) {
$prefix = ''.$order[2];
$suffix = 'PRO';
$order_id = str_ireplace("#", "", $order[1]); //remove # before from order id
$new_order_id = $prefix . $order_id . $suffix;
return $new_order_id;
}
توی دیتابیسم گشتم ببینم که اسم این پارامتر چیه ولی نتونستم ممنون میشم راهنمایی کنی
@mehdimohseninia71
سلام
توضیح دادم به چه صورت باید اطلاعات سفارش رو بدست بیارین
من نمیدونم کد ملی رو به چه صورت به اطلاعات مشتری اضافه کردین ، ولی تو این کد من کد پستی مشتری رو به عنوان prefix شماره سفارش اضافه میکنم
add_filter( 'woocommerce_order_number', 'change_woocommerce_order_number' );
function change_woocommerce_order_number( $order_id ) {
$order = new WC_Order($order_id);// دریافت اطلاعات سفارش
$postcode=$order->get_billing_postcode(); // دریافت کد پستی سفارش
$prefix = $postcode;
$suffix = 'PRO';
$order_id = str_ireplace("#", "", $order_id); //remove # before from order id
$new_order_id = $prefix . $order_id . $suffix;
return $new_order_id;
}
اگر به صورت متا دیتا اضافه کردین اینطوری میتونید دریافتش کنید
$order->get_meta('')
که باید key یا همون نامش رو به این متد پاس بدین
اگر با پلاگین اضافه کردین نامش رو بگین تا راهنمایی کنم
سلام بسیار آموزش خوبی ارائه دادی ابتدا ممنون
پلاگین ها میان کد سفارش رو تبدیل میکنن به یه چیزی مثل زیر
prefix-orderID-suffix
و پیشوند رو میشه تاریخ سال و ماه رو روز گذاشت
orderid رو میشه یه عدد متوالی که از ۱ شروع بشه که بصورت زور یا ماه یا سال ریست بشه و دوباره از ۱ شروع بشه
و پسوند رو هم کد پستی یا هر چیزی
البته توی پلاگین ها جای همه این ها میشه عوض شه
میتونید نمونه کدی ارائه بدید که این مشخصات رو داشته باشه تا مجبور نشیم از پلاگین سنگین بوستر ووکامرس استفاده کنیم
من تا اینجا پیش رفتم
فقط تاریخ شمسی نمیشه
( # ) هم از ابتدای شماره سفارش حذف نمیشه
add_filter( 'woocommerce_order_number', 'change_woocommerce_order_number' );
function change_woocommerce_order_number( $order_id ) {
$order = new WC_Order($order_id);
// The orders date
$order_date = $order->get_date_created();
$order_date = $order_date->date('Y-m-d');
$prefix ='sepia-';
$suffix =$order_date;
$order_id =str_replace("#", "", $order_id); //remove # before from order id
$new_order_id =$prefix . $suffix . $order_id;
return $new_order_id;
}
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟