كيفية تصفية طلبات WooCommerce حسب حالات الطلبات المتعددة؟

نشرت: 2019-02-16

سألنا أحد عملائنا مؤخرًا هذا السؤال لصفحة طلبات WooCommerce في المسؤول: هل هناك طريقة لتحديد حالات متعددة في خلفية الطلب؟

على الرغم من أن مالكي متاجر WooCommerce قد لا يحتاجون إلى القيام بذلك بشكل منتظم ، إلا أن هذا سيساعد بعضهم بالتأكيد.

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

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

WooCommerce Orders in Admin
طريقة عرض صفحة أوامر WooCommerce الافتراضية

بصرف النظر عن حالات الطلب الافتراضية ، فقد أضفت حالة طلب مخصصة: تم التسليم. تمت إضافة هذا باستخدام المكون الإضافي Custom Order Status & للتحقق من أن التصفية ستعمل أيضًا مع حالات الطلبات المخصصة جنبًا إلى جنب مع الحالات الافتراضية.

الجزء 1: تصفية أوامر WooCommerce لإظهار أوامر متعددة الحالات في عرض واحد

هناك طرق متعددة للبحث عن حل لهذا. يمكن أن يكون إما عبر مكون إضافي ، أو عن طريق إضافة قائمة منسدلة متعددة التحديد لحالة الطلب مع مقتطف رمز. أو بطريقة بدائية ، ما عليك سوى إضافة الحالة التي تريدها في عنوان URL.

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

لنلقِ نظرة على الكود أولاً.

 / **
 * معالجة عوامل التصفية لتضمين حالات woocommerce الإضافية
 *
 *param array $ query_vars متغيرات الاستعلام.
 *return مجموعة
 * /
function ts_woocommerce_include_order_status ($ query_vars) {
  النوع $ العالمي ؛

  / **
   * استخدام wc_get_order_types () بدلاً من "shop_order" حيث يمكن إضافة أنواع الطلبات الأخرى بواسطة مكونات إضافية أخرى
   * /
  if (in_array ($ typenow، wc_get_order_types ('order-meta-box')، true)) {
    إذا (isset ($ _GET ['include_status']) && ''! = $ _GET ['include_status']
       && isset ($ query_vars ['post_status'])) {
      $ include_status = explode ('،'، $ _GET ['include_status'])؛
      $ q_post_status [] = $ query_vars ['post_status']؛
      $ query_vars ['post_status'] = array_merge ($ q_post_status، $ include_status)؛
    }
  }
  إرجاع $ query_vars؛
}
add_filter ('request'، 'ts_woocommerce_include_order_status'، 20، 1) ؛

نحن نقوم ببعض الأشياء في المقتطف أعلاه.

أولاً ، نرفق وظيفتنا بفلتر الطلبات في WordPress.

نظرًا لأننا نريد تشغيل الكود الخاص بنا لصفحة أوامر WooCommerce فقط ، فإننا نقوم بذلك عن طريق التأكد من وجود متغير typenow $ في المصفوفة التي يتم إرجاعها من دالة wc_get_order_types (). في هذه الحالة ، يتم تعيين $ typenow إلى shop_order . هذا هو نوع post_type للأوامر التي تم إنشاؤها بواسطة WooCommerce.

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

WooCommerce Orders with Pending status
أوامر WooCommerce مع حالة معلقة

إذا كنت تريد رؤية الطلبات المستردة مع الطلبات المعلقة ، فهذا غير ممكن. ومع ذلك ، إذا قمت بإضافة مقتطف الشفرة أعلاه في jobs.php الخاص بسمة الطفل ، ثم إذا قمت بتغيير عنوان URL لصفحة الطلبات إلى الرابط أدناه في متصفحك:

<your_store_url> /wp-admin/edit.php؟post_status=wc-pending&post_type=shop_order&include_status=wc-refunded

سترى أن الطلبات المعلقة وكذلك الطلبات المستردة ستظهر.

WooCommerce orders with status as Pending & Refunded being shown
تظهر طلبات WooCommerce بالحالة المعلقة والمستردة

في معلمة include_status ، يمكنك أيضًا تمرير حالات طلب متعددة مفصولة بفواصل. لذلك ، إذا كنت ترغب في عرض الطلبات المعلقة ، والمرتجعة ، والمستلمة ، فيمكنك القيام بذلك عن طريق تغيير عنوان URL على النحو التالي:

<your_store_url> /wp-admin/edit.php؟post_status=wc-pending&post_type=shop_order&include_status=wc-refunded،wc-delivered

من المهم ملاحظة أن Delivered هي حالة مخصصة قمت بإضافتها في اختبار تثبيت WooCommerce التجريبي. إنها سبيكة يتم تسليمها wc. تتم إضافة الحالة مع المكون الإضافي حالة الطلب المخصص.

عندما تفتح الرابط أعلاه ، سترى الطلبات بهذه الحالات الثلاثة:

WooCommerce orders with status as Pending, Refunded & Delivered being shown
يتم عرض طلبات WooCommerce بالحالة معلقة ، وتم رد أموالها وتسليمها

يتم استبدال الفاصلة الموجودة في عنوان URL بـ٪ 2C بسبب ترميز URL.

الجزء 2: تصفية أوامر WooCommerce لإخفاء أوامر حالة واحدة أو أكثر في طريقة العرض "الكل"

بشكل افتراضي ، يتم تقديمك بطريقة عرض حيث يتم عرض أوامر WooCommerce لجميع الحالات في صفحة الطلبات.

WooCommerce Orders in Admin

لقد قمت بإنشاء مقتطف الشفرة أدناه الذي يسمح لك بتمرير متغير في عنوان URL ، استبعاد_الحالة . في متغير Exce_status ، يمكنك تمرير الجزء الثابت للحالة التي ترغب في استبعادها من الظهور في صفحة الطلبات في طريقة العرض "الكل". ها هو الكود:

 / **
 * معالجة عوامل التصفية لاستبعاد حالات woocommerce من عرض جميع الطلبات
 *
 *param array $ query_vars متغيرات الاستعلام.
 *return مجموعة
 * /
الوظيفة ts_woocommerce_exclude_order_status ($ query_vars) {
  النوع $ العالمي ؛

  / **
   * استخدام wc_get_order_types () بدلاً من "shop_order" حيث يمكن إضافة أنواع الطلبات الأخرى بواسطة مكونات إضافية أخرى
   * /
  if (in_array ($ typenow، wc_get_order_types ('order-meta-box')، true)) {
    إذا (isset ($ _GET ['lusione_status ']) &&' '! = $ _GET [' استبعاد_الحالة ']
       && isset ($ query_vars ['post_status'])) {
      $lusione_status = explode ('،'، $ _GET ['استبعاد_الحالة'])؛
      foreach (استثناءات_الحالة $ كـ $ key => قيمة $) {
        إذا (($ key = array_search ($ value، $ query_vars ['post_status']))! == false) {
          unset (query_vars $ ['post_status'] [$ key]) ؛
        }
      }
    }
  }
  إرجاع $ query_vars؛
}
add_filter ('request'، 'ts_woocommerce_exclude_order_status'، 20، 1) ؛

عند إضافة الكود أعلاه في ملف jobs.php الخاص بالقالب الفرعي الخاص بك ، ثم إذا قمت بتغيير عنوان URL لصفحة أوامر WooCommerce الخاصة بك إلى العنوان التالي:

<your_store_url> /wp-admin/edit.php؟post_type=shop_order&exclude_status=wc-pending

ثم لن يتم عرض الطلبات ذات الحالة المعلقة في العرض الافتراضي لجميع الطلبات:

Excludes Pending orders from being displayed from all orders view
يستثني الطلبات المعلقة من أن يتم عرضها من عرض جميع الطلبات

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

<your_store_url> /woocommerce/wp-admin/edit.php؟post_type=shop_order&exclude_status=wc-pending،wc-delivered

لن تعرض صفحة الطلبات بعد الآن الطلبات المعلقة والمستلمة في طريقة العرض "الكل":

Excludes Pending & Delivered orders from being displayed from all orders view
يستثني الطلبات المعلقة والمستلمة من عرض جميع الطلبات

فيما يلي مرجع لحالات طلب WooCommerce الافتراضية والارتباط الثابت الخاص بها.

  • الدفع المعلق - مرحاض معلق
  • فشل - فشل مرحاض
  • المعالجة - معالجة مرحاض
  • اكتمل - مرحاض مكتمل
  • في الانتظار - مرحاض معلق
  • تم الإلغاء - تم إلغاء دورة المياه
  • معاد - مرحاض مسترد

لا تعد إضافة حالات الطلب في عنوان URL مباشرة أفضل طريقة. لكن فكرة هذا المنشور هي إظهار كيف يمكن تحقيق الهدف.

هل جربت أي طريقة أخرى لتصفية الطلبات حسب حالات الطلب في WooCommerce؟ انا احب ان اعرفهم