آموزش ثبت سفارش در ووکامرس با کدنویسی

ثبت سفارش در ووکامرس با کدنویسی

 

هماهنطور که در مقاله دریافت اطلاعات سفارشات ووکامرس از آبجکت Order گفته شد، برای توسعه قالب‌ها یا افزونه‌های وردپرسی برای سایت فروشگاهی با افزونه ووکامرس سروکار خواهید داشت. یکی از ماهیت‌های پرکاربرد در افزونه ووکامرس order است. من امیر طاهر هستم و در این مقاله در مورد ثبت سفارش در ووکامرس با کدنویسی و با استفاده از توابع و کلاس‌های ووکامرس صحبت خواهم کرد.

چرا باید با استفاده از کدنویسی یک سفارش ثبت کنیم؟

این قسمت از مقاله قصد دارم درباره یک مفهوم پایه‌ای و نسبتا بنیادین در مقابل عنوان اصلی مقاله صحبت کنم. اگر شما صرفا به دنبال روش ثبت سفارش در ووکامرس با کدنویسی هستید، پیشنهاد میکنم پاراگراف بعدی را رد کنید. اما اگر دغدغه‌ی آشنایی با مدل تفکر توسعه نرم افزار را دارید، مطالعه این قسمت می‌تواند ذهنیت خوبی به شما بدهد.

خب قطعا همگی می‌دانیم که خود ووکامرس راه‌هایی برای ثبت سفارش پیاده سازی کرده و فرآیند آن بصورت پیشفرض در دسترس همه کسانی که از این افزونه استفاده می‌کنند، است. اما مسئله اینجاست که در فرآیند توسعه یک محصول، ممکن است دغدغه‌های متنوعی ایجاد شود. دغدغه‌هایی که شاید بصورت پیشفرض برای پاسخ به آنها راه حلی در نظر گرفته نشده باشد.

مثلا در مورد همین مسئله فرض کنید میخواهید یک پنلی برای اپراتورهای یک فروشگاه اینترنتی طراحی کنید که از طریق آن بتوانند سفارش‌هایی را برای مشتریان سایت ثبت کنند. یا مثلا قابلیتی را ایجاد کنید که کاربر با استفاده از یک ربات تلگرامی بتواند سفارش خود را در سایت شما ثبت کند. یا هر چیزی که نیاز باشد شما خارج از حالت‌هایی که ووکامرس بصورت پیشفرض در نظر گرفته بخواهید یک سفارش ثبت کنید. در این شرایط برای پیاده سازی این کار دو راه وجود دارد. یا از ابزارهای جانبی که این نیاز را برآورده کنند استفاده کنید و یا خودتان دست به کار شده و با کدنویسی و استفاده از توابع و کلاس‌های ووکامرس ثبت سفارش کنید و این قابلیت‌ها را در فروشگاه اینترنتی مورد نظر خود پیاده سازی کنید.

بطور کلی برخلاف تصور عموم افراد شما در وردپرس و همچنین افزونه‌ های پرکاربرد آن مثل ووکامرس، محدود به شرایط خاصی نخواهید شد. ساختار وردپرس بطوری پیاده سازی شده که شما می‌توانید هر قابلیتی که مدنظرتان باشد را با استفاده از برنامه نویسی پیاده سازی کنید. فقط کافی است با توابع و کلاس‌های مورد نیاز آن آشنا باشید.

ثبت سفارش در ووکامرس با کدنویسی

ثبت یک سفارش ساده بدون هیچ اطلاعات خاصی تنها با استفاده از یک تابع صورت میگیرد.

$order = wc_create_order();

با استفاده از این یک خط کد صرفا یک سفارش بدون هیچ آیتمی و بدون هیچ اطلاعاتی درباره مشتری آن و مبلغ سفارش ثبت میشود. اما این کارامد نخواهد بود. برای ثبت سفارش ما نیاز داریم تا بتوانیم آیتم‌هایی را به آن سفارش اضافه کنیم.

ثبت آیتم‌های یک سفارش ثبت شده

قبل از هر چیز یک توضیخ کوتاه درباره این که آیتم سفارش یا order item چیست خواهم داد. در واقع یک ماهیت یا entity زیر مجموعه از خود سفارش است. یک سفارش قاعدتا شامل چندین item خواهد شد. و هر آیتم میتواند یکی از این موارد باشد :

  • محصولات ثبت شده در آن سفارش
  • هزینه های ثبت شده در سفارش
  • روش حمل و نقل مربوط به آن سفارش
  • کد تخفیف ثبت شده در سفارش

خب فرآیند ثبت آیتم های یک سفارش به چه صورت است؟

قبل از هر چیز طبق یک خط کدی که بالا گفتیم، سفارش را ایجاد میکنیم. تابع wc_create_order آبجکت سفارشی که ثبت شده را به ما برمیگرداند. حالا میتوانیم از متد‌های مورد نظر در مورد آن برای ثبت آیتم‌های دلخواه استفاده کنیم.

اضافه کردن محصولات به سفارش به عنوان order item

با استفاده از متد add_product میتوانیم به سادگی این کار را انجام دهیم. برای این کار باید آبجکت محصول یا متغیر ( variation ) مورد نظر را به همراه تعدادی که مدنظر داریم به این متد پاس بدهیم.

در انتها باید از متد calculate_totals استفاده کنیم تا جمع مبلغ سفارش بر اساس محصولات اضافه شده، محاسبه شود.

$order = wc_create_order();
$order->add_product( wc_get_product( 136 ), 2 );
$order->add_product( wc_get_product( 70 ) );
$order->calculate_totals();

افزودن کد تخفیف برای سفارش ثبت شده

برای این کار براحتی میتوانیم با استفاده از متد apply_coupon یک کد تخفیف را به سفارش اضافه کرده و تنها کافی است کد تخفیف مورد نظر را به آن پاس بدهیم.

$order = wc_create_order();

$order->apply_coupon( 'HappyNewYearOff' );

ثبت یک روش حمل و نقل به سفارش

برای این کار ابتدا باید با استفاده از کلاس WC_Order_Item_Shipping یک آبجکت از آن ایجاد کرده و با استفاده از متدهای آن اطلاعات مربوط به روش حمل و نقل را مشخص کنیم. سپس آبجکت ایجاد شده را با استفاده از متد add_item به سفارش پاس میدهیم و پس از آن calculate_totals را صدا میزنیم تا اطلاعات مبالغ کل سفارش بر اساس آن روش حمل و نقل بروز شود.

// create shipping object

$shipping = new WC_Order_Item_Shipping();

$shipping->set_method_title( 'Free shipping' );

$shipping->set_method_id( 'free_shipping:1' ); Shipping method ID

$shipping->set_total( 0 );

// add to order

$order = wc_create_order();

$order->add_item( $shipping );

$order->calculate_totals();

ثبت اطلاعات آدرس مشتری سفارش

برای این کار ابتدا باید یک آرایه از اطلاعات ایجاد کرده و آن را به متد set_address پاس می‌دهیم تا اطلاعات به سفارش افزوده شود. پارامتر دوم این متد دو مقدار billing یا shipping را دریافت کرده که مشخص میکند این اطلاعات به عنوان billing address یا shipping address ثبت شوند.

$address = array(
    'first_name'=>'Amir',
    'last_name'=>'Taher',
     'company'=> 'wiki-plus.ir',
     'email'=> 'info@ wiki-plus.ir ',
     'phone'=>'909-230-12-02',
     'address_1'=> 'tehran - pirouzi st – no1','address_2'  => '',
     'city'=> 'tehran',
     'state'=> '',
     'postcode'   => '510',
     'country'    => 'IRI'
    ); 
$order = wc_create_order();
$order->set_address( $address, 'billing' );
$order->set_address( $address, 'shipping' );

ثبت اطلاعات مشتری برای سفارش

برای این کار با استفاده از متد set_customer_id میتوانیم شناسه مشتری را برای آن سفارش مشخص کنیم. حتی در صورت لزوم می‌توانیم ip که کاربر از آن سفارش را ثبت کرده نیز با استفاده از متد set_customer_ip_address مشخص کنیم.

$order = wc_create_order(); 
$order->set_customer_id( 1 );
$order->set_customer_ip_address( '198.22.04.1' );

ثبت روش پرداخت برای سفارش

هماهنطور که تا اینجا مشاهده کردید فرآیند هر مرحله به سادگی هر چه تمام قابل اجرا است. برای ثبت روش پرداخت نیز کافیست از متدهای set_payment_method برای ثبت روش پرداخت و set_payment_method_title برای ثبت عنوان روش پرداخت استفاده کنیم. برای پارامتر set_payment_method باید یکی از روش‌های پرداخت تعریف شده در سایت را قرار بدهیم.

$order = wc_create_order();
 $order->set_payment_method( 'zarinPal' );
$order->set_payment_method_title( 'zarinpal payment method' );

ثبت وضعیت سفارش

دو روش متفاوت برای ثبت وضعیت مورد نظر وجود دارد. در روش اول از متد update_status استفاده میکنیم و پس از فراخوانی آن وضعیت جدید بلافاصله در دیتابیس بروزرسانی می‌شود.

در روش دوم می‌توانیم از متد set_status استفاده کنیم. در این حالت وضعیت آبجکت مورد نظر تغییر میکند اما تا زمانی که از متد save استفاده نکنیم، تغییرات در دیتابیس ذخیره نخواهند شد. این دو روش تفاوت بسیار کمی با هم دارند که بسته به موقعیتی که مورد نظر شماست میتوانید هر کدام از آنها را استفاده کنید.

$order = wc_create_order();
$order->set_status( 'wc-completed' );
$order->save();

جمع بندی

در این مقاله تمام متدهای مرتبط برای ثبت سفارش در ووکامرس با کدنویسی را با هم بررسی کردیم. ممنونم که تا انتها همراه من بودید. امیدوارم مطالعه این مقاله برای شما مفید بوده باشد. اگر در مورد مفاهیم مطرح شده ابهام یا سوالی داشتید میتوانید از طریق کامنت‌های همین پست آن را مطرح کنید و از این طریق با هم در ارتباط باشیم.


https://wiki-plus.ir/new-order-in-woocommerce

دیدگاه و پرسش

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *