كيفية إكمال طلبات WooCommerce تلقائيًا عندما ينتقلون إلى حالة المعالجة

نشرت: 2019-04-06

يتطلب كل موقع للتجارة الإلكترونية تتبع الطلبات وإدارتها والتي يمكن أن تكون مهمة شاقة للغاية بالنسبة للمسؤول ، مع الأخذ في الاعتبار عدد الطلبات التي يتلقاها موقع التجارة الإلكترونية ذي معدل الزيارات المرتفع يوميًا. عندما يتعلق الأمر بـ WooCommerce ، يتم إنشاء طلب بمجرد اكتمال عملية Checkout (راجع تدفق حالة طلب WooCommerce أدناه).

وفقًا لمكان وجود الطلب في سلسلة الدفع حتى التسليم ، يتم تعيين حالة له. يتم تعيين هذه الحالات و / أو تغييرها بواسطة WooCommerce وبوابة الدفع ومالك المتجر / المسؤول اعتمادًا على مكان وجود الطلب.

قبل أن نلقي نظرة على تدفق الطلب في WooCommerce ، دعنا نحدد حالة الطلب في Woocommerce لصالح المبتدئين.

ما هي حالة الطلب في WooCommerce؟

حالة الطلب هي تمثيل للحالة الحالية التي يتم فيها تقديم الطلب بواسطة العميل . تتغير حالة الطلب في Woocommerce حيث تتم معالجة الطلب حتى مرحلة التسليم أو استرداد الأموال في حالة وجود مشكلة مع المنتج / الخدمات وحيث وافق مالك المتجر على رد الأموال إلى العميل. على سبيل المثال ، عندما يضع العميل طلبًا على منتج معين ، فسيتم على الفور تعيين حالة الطلب التالية في التسلسل ، وهي "الدفع المعلق". يتم تعيين الدفع المعلق افتراضيًا في Woocommerce.

الآن ، دعنا نلقي نظرة على مخطط التدفق من أجل فهم أفضل.

مخطط تدفق حالة طلب Woocommerce

Woocommerce Order Status Flow Chart
المصدر: https://docs.woocommerce.com/document/managing-orders/

كما هو موضح ، بعد إتمام الدفع لأمر ما بنجاح ، يتم تعيين حالته على "قيد المعالجة" حتى يغيرها مالك المتجر يدويًا إلى "مكتمل". هذه مهمة عامة لمالك المتجر أو المسؤول ، خاصة في الحالات التي يكون فيها حجم المبيعات مرتفعًا. تتمثل إحدى طرق جعل هذه العملية فعالة في إكمال أوامر WooCommerce تلقائيًا عندما ينتقلون إلى حالة المعالجة. دعونا نرى كيف يمكننا القيام بذلك باستخدام مقتطف الشفرة.

قائمة كاملة بحالة الطلب في WooCommerce

  • الدفع المعلق: يحدث هذا بشكل افتراضي عند تقديم الطلب ولكن لم يتم السداد.
  • فشل: يشير هذا إلى أن الدفعة لم تتم وتم رفضها.
  • المعالجة: يشير هذا إلى أن الدفعة تمت واستلمها أصحاب المتاجر ويمكن الآن معالجتها للشحن والتسليم.
  • مكتمل: يشير هذا إلى أن كل شيء سار على ما يرام وأن الطلب قد تم تنفيذه وإتمامه الآن.
  • قيد الانتظار : يشير هذا إلى الحالة التي يتطلب فيها الطلب تأكيدًا من مالك المتجر.
  • ملغى : حالة الطلب "ملغى" لا تتطلب أي إجراء آخر. يمكن أن يكون الإلغاء إما من المسؤول أو العميل في وقت ما.
  • تم رد الأموال : تم رد أموال الطلب ، ولا يلزم اتخاذ أي إجراء آخر

الآن بعد أن فهمنا بشكل أفضل حالة الطلب ووظيفته ، دعنا نرى لماذا قد يكون تحديثه فكرة جيدة.

قم بتعيين حالة طلب WooCommerce تلقائيًا على أنها مكتملة بناءً على طريقة الدفع

في معظم الحالات ، لن تحتاج إلى القيام بذلك إلا بعد إتمام الدفع بنجاح ، وهذا ممكن فقط عندما لا يكون المستخدم قد حدد خيار الدفع عند الاستلام. الكود أدناه ، عند إدراجه في ملف jobs.php الخاص بموضوع الطفل ، سيعمل تلقائيًا على تعيين حالة الطلب على أنه مكتمل كلما تم إجراء الدفع بنجاح. ومن ثم ، في جميع الحالات باستثناء عندما يحدد المستخدم خيار الدفع عند الاستلام ، ستتغير حالة الطلب تلقائيًا إلى مكتمل.

 add_action ('woocommerce_order_status_changed'، 'ts_auto_complete_by_payment_method') ؛

الدالة ts_auto_complete_by_payment_method ($ order_id)
{
  
  إذا (! $ order_id) {
        إرجاع؛
  }

  منتج $ عالمي ؛
  الطلب بالدولار = wc_get_order ($ order_id) ؛
  
  if ($ order-> البيانات ['status'] == 'Processing') {
        طريقة الدفع بالدولار = الطلب بالدولار -> get_payment_method () ؛
        إذا ($ payment_method! = "cod")
        {
            order-> update_status ("مكتمل") ؛
        }
      
  }
  
}

هنا ، ستستخدم الخطاف woocommerce_order_status_changed لاستدعاء وظيفة عند تغيير حالة الطلب. بعد التحقق مما إذا كان الطلب في حالة المعالجة ، فقط إذا لم تكن طريقة الدفع الدفع نقدًا عند التسليم ، سيتم تغيير حالة الطلب إلى مكتمل . لدى WooCommerce أربع طرق دفع افتراضية. التحويل المصرفي المباشر (bacs) ، الدفع بالشيكات (الشيكات) ، الدفع نقدًا عند الاستلام (cod) و PayPal (paypal). اعتمادًا على طريقة الدفع التي تحدد الشرط لها ، ستحتاج إلى استخدام المعرف المناسب مثل "bacs" و "check" و "cod" و "paypal".

قم بتعيين حالة طلب WooCommerce تلقائيًا على أنها مكتملة للمنتجات الافتراضية

الحالة الأخرى التي تريد أن تكتمل فيها حالة الطلب تلقائيًا هي عندما يكون المنتج أو المنتجات في الطلب منتجات افتراضية. المنتجات الافتراضية هي منتجات غير ملموسة أو قابلة للتنزيل. مثال على ذلك هو اشتراك عضوية المتجر أو القسيمة التي تقدم خصومات لأولئك الذين اشتروا الاشتراك.

automatically Complete WooCommerce orders when they go to the Processing status - Virtual Product Example - Store Membership
مثال على منتج افتراضي

قد لا يكون لاشتراك عضوية المتجر نموذجًا ملموسًا ولكن بدلاً من ذلك يكون له تاريخ انتهاء الصلاحية. المنتجات القابلة للتنزيل مثل البرامج أو حتى تذاكر الأفلام الإلكترونية هي منتجات افتراضية أيضًا ، حيث لا يوجد لها وجود أو نموذج في وضع عدم الاتصال. مع معظم المنتجات الافتراضية ، لا يوجد أبدًا خيار "الدفع عند الاستلام". تتم المدفوعات على الفور ، وبالتالي سيكون من الآمن عدم تضمين شرط التحقق من طرق الدفع المستخدمة ، ولكن بدلاً من ذلك أضف شرطًا للتحقق مما إذا كانت جميع المنتجات في الطلب منتجات افتراضية.

 add_action ('woocommerce_order_status_changed'، 'ts_auto_complete_virtual') ؛

الوظيفة ts_auto_complete_virtual ($ order_id)
{
  
  إذا (! $ order_id) {
        إرجاع؛
  }
  
  منتج $ عالمي ؛
  الطلب بالدولار = wc_get_order ($ order_id) ؛
  
  if ($ order-> البيانات ['status'] == 'Processing') {
    
    $ virtual_order = null؛

    إذا (count ($ order-> get_items ())> 0) {

      foreach ($ order-> get_items () كـ $ item) {

        إذا ('line_item' == $ item ['type']) {

          $ _product = $ order-> get_product_from_item ($ item) ؛

          إذا (! $ _product-> is_virtual ()) {
            // بمجرد أن نجد منتجًا غير افتراضي واحد ، اخرج من الحلقة
            $ virtual_order = خطأ ؛
            فترة راحة؛
          } 
          آخر {
            $ virtual_order = صحيح ؛
          }
       }
     }
   }

    // إذا كانت جميعها منتجات افتراضية ، فضع علامة على أنها مكتملة
    إذا (virtual_order $) {
      order-> update_status ("مكتمل") ؛
    }
  }	
}

هنا ، نستخدم نفس الخطاف لاستدعاء وظيفتنا ts_auto_complete_virtual . بعد التحقق مما إذا كان الطلب في حالة معالجة ، تحتاج إلى استعراض كل عنصر بالترتيب لمعرفة ما إذا كان منتجًا افتراضيًا.

استنتاج

يحتوي طلب Woocommerce النموذجي على الكثير من العناصر المرتبطة به مثل المنتجات والشحن والرسوم وما إلى ذلك. هنا ، يشير line_item إلى المنتج. يجب جلب المنتجات واحدة تلو الأخرى فقط للتحقق مما إذا كانت افتراضية. إذا لم يكن أحد العناصر منتجًا افتراضيًا ، فلن يتم وضع علامة على حالة الطلب على أنها مكتملة.

بناءً على متطلباتك ، ومع ذلك ، وباستخدام مقتطف الشفرة الأول في هذا المنشور ، يمكنك إضافة المزيد من الشروط لتمييز حالة الطلب على أنها مكتملة. على سبيل المثال ، إذا كنت ترغب في وضع علامة على حالة الطلب على أنها مكتملة حتى بالنسبة للمنتجات غير الافتراضية (إذا تم الدفع لهذه المنتجات) ، فيمكنك القيام بذلك عن طريق إضافة شيك على طريقة الدفع بعد أن تتحقق مما إذا كانت افتراضية منتج. ومع ذلك ، من خلال مقتطف الشفرة هذا ، سيتم تعيين حالة الطلب على أنها مكتملة فقط إذا كانت جميع المنتجات في الطلب منتجات افتراضية.