จะกรองคำสั่งซื้อของ WooCommerce ตามสถานะคำสั่งซื้อหลายรายการได้อย่างไร

เผยแพร่แล้ว: 2019-02-16

ลูกค้ารายหนึ่งของเราเพิ่งถามคำถามนี้สำหรับหน้าคำสั่งซื้อ WooCommerce ในผู้ดูแลระบบ: มีวิธีเลือกหลายสถานะในแบ็กเอนด์ของคำสั่งซื้อหรือไม่

แม้ว่าเจ้าของร้านค้า WooCommerce อาจไม่จำเป็นต้องทำเช่นนี้เป็นประจำ แต่สิ่งนี้จะช่วยพวกเขาได้บ้าง

โพสต์นี้จะอธิบายวิธีแสดงคำสั่งซื้อ WooCommerce ที่มีสถานะต่างกันในมุมมองเดียว ในช่วงครึ่งหลังของโพสต์นี้ เราจะตรวจสอบวิธียกเว้นสถานะหนึ่งหรือหลายสถานะเมื่อมีการแสดงคำสั่งซื้อทั้งหมด

พฤติกรรมเริ่มต้นของ WooCommerce คือคุณสามารถ ดูคำสั่งซื้อทั้งหมดหรือคำสั่งซื้อสำหรับสถานะใด ก็ได้ แต่คุณไม่สามารถดูคำสั่งซื้อที่มีสถานะต่างกันได้ เช่น คำสั่งซื้อที่รอดำเนินการและขอคืนเงิน หรือคุณไม่สามารถยกเว้นคำสั่งซื้อของสถานะในมุมมองทั้งหมดได้

WooCommerce Orders in Admin
มุมมองหน้าคำสั่งซื้อ WooCommerce เริ่มต้น

นอกเหนือจากสถานะคำสั่งซื้อเริ่มต้น ฉันได้เพิ่มสถานะคำสั่งซื้อที่กำหนดเอง: ส่งแล้ว เพิ่มสิ่งนี้โดยใช้ปลั๊กอินสถานะคำสั่งซื้อที่กำหนดเอง & ถูกเพิ่มเพื่อตรวจสอบว่าการกรองจะทำงานกับสถานะคำสั่งซื้อที่กำหนดเองพร้อมกับสถานะเริ่มต้น

ส่วนที่ 1: กรองคำสั่งซื้อของ WooCommerce เพื่อแสดงคำสั่งซื้อหลายสถานะในมุมมองเดียว

มีหลายวิธีในการค้นหาวิธีแก้ปัญหานี้ อาจเป็นผ่านทางปลั๊กอินหรือโดยการเพิ่มรายการแบบเลื่อนลงของสถานะคำสั่งซื้อที่มีข้อมูลโค้ด หรือแบบคร่าวๆ เพียงเพิ่มสถานะที่คุณต้องการใน URL

ไม่ใช่วิธีที่ดีที่สุด แต่ได้ผล ฉันอาจกลับมาที่โพสต์นี้ในภายหลังและอัปเดตเพื่อรวมรายการดรอปดาวน์ของสถานะคำสั่งซื้อ WooCommerce แบบเลือกได้หลายรายการ

มาดูโค้ดกันก่อน

 /**
 * จัดการตัวกรองเพื่อรวมสถานะ woocommerce เพิ่มเติม
 *
 * @param array $query_vars แบบสอบถาม vars
 * @return อาร์เรย์
 */
ฟังก์ชั่น ts_woocommerce_include_order_status ($query_vars) {
  โกลบอล $typenow;

  /**
   * การใช้ wc_get_order_types() แทน 'shop_order' เนื่องจากปลั๊กอินอื่นสามารถเพิ่มประเภทคำสั่งอื่นได้
   */
  if (in_array( $typenow, wc_get_order_types( 'order-meta-boxes' ), ​​true )) {
    if ( isset( $_GET['include_status'] ) && '' != $_GET['include_status']
       && isset( $query_vars['post_status'] ) ) {
      $include_status = ระเบิด( ',', $_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( 'คำขอ', 'ts_woocommerce_include_order_status', 20, 1 );

เรากำลังดำเนินการบางอย่างในตัวอย่างข้างต้น

ขั้นแรก เราแนบฟังก์ชันของเราเข้ากับตัวกรองคำขอของ WordPress

เนื่องจากเราต้องการให้โค้ดของเราทำงานเฉพาะในหน้าคำสั่งซื้อของ WooCommerce เราจึงทำเช่นนั้นโดยตรวจสอบให้แน่ใจว่าตัวแปร $typenow มีอยู่ในอาร์เรย์ที่ส่งคืนจากฟังก์ชัน wc_get_order_types() ในกรณีนี้ $typenow ถูกตั้งค่าเป็น shop_order นั่นคือ post_type ของคำสั่งซื้อที่สร้างโดย WooCommerce

include_status เป็นตัวแปร GET ที่คุณควรส่งผ่านสถานะคำสั่งซื้ออื่นๆ ที่คุณต้องการให้แสดง สถานะคำสั่งซื้อหลายรายการสามารถส่งผ่านโดยคั่นด้วยเครื่องหมายจุลภาค ก่อนอื่นคุณควรกรองคำสั่งซื้อตามสถานะคำสั่งซื้อ 1 รายการที่คุณต้องการดู สมมติว่าคุณกรองตามคำสั่งซื้อที่รอดำเนินการ

WooCommerce Orders with Pending status
คำสั่งซื้อ WooCommerce ที่มีสถานะรอดำเนินการ

หากคุณต้องการดูคำสั่งซื้อที่คืนเงินพร้อมกับคำสั่งซื้อที่รอดำเนินการ จะไม่สามารถทำได้ อย่างไรก็ตาม หากคุณเพิ่มข้อมูลโค้ดด้านบนใน functions.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 ที่มีสถานะเป็น Pending & Refunded กำลังแสดงอยู่

ในพารามิเตอร์ 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 กระสุนมันถูกส่งมาจากห้องสุขา สถานะจะถูกเพิ่มด้วยปลั๊กอินสถานะคำสั่งซื้อที่กำหนดเอง

เมื่อคุณเปิดลิงก์ด้านบน คุณจะเห็นคำสั่งซื้อที่มี 3 สถานะ:

WooCommerce orders with status as Pending, Refunded & Delivered being shown
คำสั่งซื้อของ WooCommerce มีสถานะเป็นรอดำเนินการ คืนเงิน & ส่งมอบแล้ว

เครื่องหมายจุลภาคใน URL ถูกแทนที่ด้วย %2C เนื่องจากการเข้ารหัส URL

ส่วนที่ 2: กรองคำสั่งซื้อของ WooCommerce เพื่อซ่อนคำสั่งซื้อที่มีสถานะตั้งแต่หนึ่งสถานะขึ้นไปในมุมมองทั้งหมด

โดยค่าเริ่มต้น คุณจะเห็นมุมมองที่คำสั่ง WooCommerce ของสถานะทั้งหมดแสดงอยู่ในหน้าคำสั่งซื้อ

WooCommerce Orders in Admin

ฉันได้สร้างข้อมูลโค้ดด้านล่างที่ให้คุณส่งผ่านตัวแปรใน URL ได้, exclude_status ในตัวแปร exclude_status คุณสามารถส่งตัวทากของสถานะที่คุณต้องการแยกออกจากการแสดงบนหน้าคำสั่งซื้อในมุมมองทั้งหมด นี่คือรหัส:

 /**
 * จัดการตัวกรองเพื่อยกเว้นสถานะ woocommerce จากมุมมองคำสั่งซื้อทั้งหมด
 *
 * @param array $query_vars แบบสอบถาม vars
 * @return อาร์เรย์
 */
ฟังก์ชั่น ts_woocommerce_exclude_order_status ($query_vars) {
  โกลบอล $typenow;

  /**
   * การใช้ wc_get_order_types() แทน 'shop_order' เนื่องจากปลั๊กอินอื่นสามารถเพิ่มประเภทคำสั่งอื่นได้
   */
  if (in_array( $typenow, wc_get_order_types( 'order-meta-boxes' ), ​​true )) {
    ถ้า ( isset( $_GET['exclude_status'] ) && '' != $_GET['exclude_status']
       && isset( $query_vars['post_status'] ) ) {
      $exclude_status = ระเบิด( ',', $_GET['exclude_status'] );
      foreach ( $exclude_status เป็น $key => $value ) {
        if ( ( $key = array_search( $value, $query_vars['post_status'] ) ) !== false) {
          unset( $query_vars['post_status'][$key] );
        }
      }
    }
  }
  ส่งคืน $query_vars;
}
add_filter( 'คำขอ', 'ts_woocommerce_exclude_order_status', 20, 1 );

เมื่อมีการเพิ่มโค้ดข้างต้นในไฟล์ functions.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 และทากที่เกี่ยวข้อง

  • การชำระเงินที่รอดำเนินการ – wc-pending
  • ล้มเหลว – wc-failed
  • กำลังประมวลผล – wc-processing
  • เสร็จสมบูรณ์ – wc-เสร็จสมบูรณ์
  • ถือ - wc-on-hold
  • ยกเลิก – wc-cancelled
  • Refunded – wc-refunded

การเพิ่มสถานะคำสั่งซื้อใน URL โดยตรงไม่ใช่วิธีที่ดีที่สุด แต่แนวคิดของโพสต์นี้คือการแสดงวิธีการบรรลุวัตถุประสงค์

คุณได้ลองใช้วิธีการอื่นในการกรองคำสั่งซื้อตามสถานะคำสั่งซื้อใน WooCommerce หรือไม่? ฉันชอบที่จะรู้จักพวกเขา