اگر یک فروشگاه تجارت الکترونیک دارید، پس می دانید که سایت نیاز به پیگیری و مدیریت سفارشات دارد. با این حال، این می تواند یک کار سخت برای مدیر باشد، به خصوص اگر فروشگاه آنلاین شما ترافیک بالایی داشته باشد، که منجر به تعداد زیادی سفارش در یک روز می شود.
علاوه بر این، می دانید که به محض تکمیل فرآیند پرداخت، سفارش ایجاد می شود. یک سفارش با توجه به جایی که سفارش در زنجیره پرداخت تا تحویل قرار دارد، وضعیتی دارد.
علاوه بر این، بسته به جایی که سفارش شروع شده است، وضعیت ها توسط ووکامرس ، دروازه پرداخت و مدیر فروشگاه تنظیم یا تغییر می کنند.
پس از اتمام پرداخت برای سفارش در صورتی که کاربر گزینه نقدی تحویل را انتخاب نکرده باشد. هنگامی که یک سفارش تکمیل می شود، وضعیت آن روی «در حال پردازش» تنظیم می شود تا زمانی که مالک فروشگاه به صورت دستی آن را به «تکمیل شده» تغییر دهد. این یک کار دلهره آور برای صاحب فروشگاه یا مدیر خواهد بود.
تایید خودکار سفارشات ووکامرس
در این آموزش کوتاه، من یک کد PHP سفارشی را با شما به اشتراک میگذارم که به شما کمک میکند تا هر زمان که پرداخت با موفقیت انجام شد، وضعیت سفارش را بهطور خودکار به عنوان تکمیل شده تنظیم کنید. این بدان معناست که حتی اگر کاربر گزینه نقدی در هنگام تحویل را انتخاب کند، وضعیت سفارش به طور خودکار به تکمیل شده تغییر می کند.
علاوه بر این، من همچنین راه حلی را با شما به اشتراک خواهم گذاشت که به طور خودکار وضعیت سفارش ووکامرس را برای محصولات مجازی به عنوان تکمیل شده تنظیم می کند. این محصولات قابل لمس و دانلود نیستند.
این به این دلیل است که اشتراک عضویت ممکن است شکل ملموسی نداشته باشد اما در عوض تاریخ انقضا داشته باشد. اگر با محصولات قابل دانلود سر و کار دارید، گزینه نقدی در هنگام تحویل نباید در آن گنجانده شود، بلکه باید فقط شرطی برای بررسی مجازی بودن تمام محصولات موجود در سفارش اضافه شود.
اکنون که می دانید وضعیت سفارش چگونه تنظیم می شود، در اینجا یک راهنمای دقیق در مورد نحوه انجام:
- بر اساس روش پرداخت، وضعیت سفارش ووکامرس را به صورت خودکار تنظیم کنید.
- وضعیت سفارش ووکامرس را به صورت خودکار برای محصولات مجازی به صورت تکمیل شده تنظیم کنید.
الف) مراحل تنظیم خودکار وضعیت سفارش ووکامرس به عنوان تکمیل شده بر اساس روش پرداخت
در اینجا مراحل ساده ای وجود دارد که باید دنبال کنید:
- وارد سایت وردپرس خود شوید و به عنوان کاربر مدیریت به داشبورد دسترسی پیدا کنید.
- از منوی داشبورد، روی Appearance Menu > Theme Editor Menu کلیک کنید. وقتی صفحه ویرایشگر تم باز شد، به دنبال فایل توابع تم بگردید که در آن تابعی را اضافه می کنیم که به طور خودکار وضعیت سفارش ووکامرس را بر اساس روش پرداخت به صورت تکمیل شده تنظیم می کند.
- کد زیر را به فایل php اضافه کنید:
/** Snippet to automatically set the woocommerce order status as completed based on the payment method */ add_action('woocommerce_order_status_changed', 'njengah_auto_complete_by_payment_method'); function njengah_auto_complete_by_payment_method($order_id) { if ( ! $order_id ) { return; } global $product; $order = wc_get_order( $order_id ); if ($order->data['status'] == 'processing') { $payment_method=$order->get_payment_method(); if ($payment_method!="bacs") { $order->update_status( 'completed' ); } } }
- برای مشاهده نتیجه، به داشبورد وردپرس بروید و روی ووکامرس > Orders کلیک کنید. مشاهده خواهید کرد که دستور مطابق شکل زیر روی Completed تنظیم شده است:
کد چگونه کار می کند
در کد بالا، من از hook woocommerce_order_status_changed برای فراخوانی یک تابع در هنگام تغییر وضعیت سفارش استفاده کرده ام. بررسی می کند که آیا سفارش وضعیت پردازش دارد یا خیر و آن را به تکمیل شده تغییر می دهد.
به طور پیش فرض، ووکامرس دارای چهار روش پرداخت پیش فرض است که عبارتند از انتقال مستقیم بانکی (bacs)، پرداخت چک (چک)، نقدی در هنگام تحویل (کد) و PayPal (PayPal). با این حال، باید روش پرداختی را که برای آن شرط تعیین می کنید، مشخص کنید.
ب) مراحل تنظیم خودکار وضعیت سفارش ووکامرس به عنوان تکمیل شده برای محصولات مجازی
در اینجا مراحلی وجود دارد که باید دنبال کنید:
- وارد سایت وردپرس خود شوید و به عنوان کاربر مدیریت به داشبورد دسترسی پیدا کنید.
- از منوی داشبورد، روی Appearance Menu > Theme Editor Menu کلیک کنید. هنگامی که صفحه ویرایشگر تم باز شد، به دنبال فایل توابع تم بگردید که در آن تابعی را اضافه می کنیم که به طور خودکار وضعیت سفارش ووکامرس را برای محصولات مجازی تکمیل شده است.
- کد زیر را به فایل php اضافه کنید:
/** Snippet to automatically set the woocommerce order status as completed for virtual products */ add_action('woocommerce_order_status_changed', 'njengah_auto_complete_virtual'); function njengah_auto_complete_virtual($order_id) { if ( ! $order_id ) { return; } global $product; $order = wc_get_order( $order_id ); if ($order->data['status'] == 'processing') { $virtual_order = null; if ( count( $order->get_items() ) > 0 ) { foreach( $order->get_items() as $item ) { if ( 'line_item' == $item['type'] ) { $_product = $order->get_product_from_item( $item ); if ( ! $_product->is_virtual() ) { // هنگامی که یک محصول غیر مجازی پیدا کردیم، از حلقه خارج شوید $virtual_order = false; break; } else { $virtual_order = true; } } } } // اگر همه محصولات مجازی هستند، به عنوان تکمیل علامت بزنید if ( $virtual_order ) { $order->update_status( 'completed' ); } } }
- نتیجه مانند مثال اول خواهد بود، زیرا سفارش به طور خودکار به عنوان تکمیل شده تنظیم می شود
کد چگونه کار می کند
در کد بالا از همان هوک برای فراخوانی تابع njengah_auto_complete_virtual استفاده کرده ام. پس از اینکه بررسی کرد که آیا در وضعیت پردازش است یا خیر، کد به ترتیب از طریق هر مورد می رود تا ببیند آیا یک محصول مجازی وجود دارد یا خیر.
خط_آیتم به محصول اشاره دارد و فقط محصولات باید یکی یکی واکشی شوند تا بررسی شود که آیا مجازی هستند یا خیر. در صورت عدم وجود محصول مجازی، وضعیت سفارش به عنوان تکمیل شده علامت گذاری نمی شود.
نتیجه
در این آموزش مختصر، نحوه تنظیم خودکار وضعیت سفارش ووکامرس را به صورت Completed به اشتراک گذاشته ام. من این کار را بر اساس روش پرداخت و برای محصولات مجازی انجام داده ام.
با این حال، بسته به الزاماتی که برای فروشگاه خود نیاز دارید، با استفاده از اولین قطعه کد، ممکن است شرایط بیشتری برای علامت گذاری وضعیت سفارش به عنوان تکمیل شده اضافه کنید. به عنوان مثال، اگر پرداخت انجام شده باشد، میتوانید وضعیت سفارش را بهعنوان تکمیلشده علامتگذاری کنید، حتی برای محصولات غیرمجازی با افزودن یک چک روی روش پرداخت پس از بررسی اینکه آیا محصول مجازی است یا خیر.
با این حال، از طریق این قطعه کد، وضعیت سفارش تنها در صورتی به عنوان تکمیل شده تنظیم می شود که همه محصولات موجود در سفارش، محصولات مجازی باشند. امیدوارم این پست راه حلی برای تایید خودکار سفارشات در ووکامرس ارائه کرده باشد.