จะกรองคำสั่งซื้อของ WooCommerce ตามสถานะคำสั่งซื้อหลายรายการได้อย่างไร
เผยแพร่แล้ว: 2019-02-16ลูกค้ารายหนึ่งของเราเพิ่งถามคำถามนี้สำหรับหน้าคำสั่งซื้อ WooCommerce ในผู้ดูแลระบบ: มีวิธีเลือกหลายสถานะในแบ็กเอนด์ของคำสั่งซื้อหรือไม่
แม้ว่าเจ้าของร้านค้า WooCommerce อาจไม่จำเป็นต้องทำเช่นนี้เป็นประจำ แต่สิ่งนี้จะช่วยพวกเขาได้บ้าง
โพสต์นี้จะอธิบายวิธีแสดงคำสั่งซื้อ WooCommerce ที่มีสถานะต่างกันในมุมมองเดียว ในช่วงครึ่งหลังของโพสต์นี้ เราจะตรวจสอบวิธียกเว้นสถานะหนึ่งหรือหลายสถานะเมื่อมีการแสดงคำสั่งซื้อทั้งหมด
พฤติกรรมเริ่มต้นของ 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 รายการที่คุณต้องการดู สมมติว่าคุณกรองตามคำสั่งซื้อที่รอดำเนินการ

หากคุณต้องการดูคำสั่งซื้อที่คืนเงินพร้อมกับคำสั่งซื้อที่รอดำเนินการ จะไม่สามารถทำได้ อย่างไรก็ตาม หากคุณเพิ่มข้อมูลโค้ดด้านบนใน functions.php ของธีมลูกของคุณ และจากนั้นหากคุณเปลี่ยน URL ของหน้าคำสั่งซื้อเป็นลิงก์ด้านล่างในเบราว์เซอร์ของคุณ:
<your_store_url>/wp-admin/edit.php?post_status=wc-pending&post_type=shop_order&include_status=wc-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 สถานะ:

เครื่องหมายจุลภาคใน URL ถูกแทนที่ด้วย %2C เนื่องจากการเข้ารหัส URL
ส่วนที่ 2: กรองคำสั่งซื้อของ WooCommerce เพื่อซ่อนคำสั่งซื้อที่มีสถานะตั้งแต่หนึ่งสถานะขึ้นไปในมุมมองทั้งหมด
โดยค่าเริ่มต้น คุณจะเห็นมุมมองที่คำสั่ง WooCommerce ของสถานะทั้งหมดแสดงอยู่ในหน้าคำสั่งซื้อ
ฉันได้สร้างข้อมูลโค้ดด้านล่างที่ให้คุณส่งผ่านตัวแปรใน 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
จากนั้นคำสั่งซื้อที่มีสถานะรอดำเนินการจะไม่แสดงในมุมมองเริ่มต้นของคำสั่งซื้อทั้งหมด:

คุณยังสามารถระบุสถานะคำสั่งซื้อหลายรายการเพื่อยกเว้นได้ ต้องคั่นด้วยเครื่องหมายจุลภาค จากตัวอย่างข้างต้น หากต้องการซ่อนคำสั่งซื้อที่รอดำเนินการและจัดส่งแล้วจากมุมมองทั้งหมด คุณสามารถเปลี่ยน URL ของหน้าคำสั่งซื้อเป็น:
<your_store_url>/woocommerce/wp-admin/edit.php?post_type=shop_order&exclude_status=wc-pending,wc-delivered
หน้าคำสั่งซื้อจะไม่แสดงคำสั่งซื้อที่รอดำเนินการและจัดส่งแล้วในมุมมองทั้งหมดอีกต่อไป:

นี่คือข้อมูลอ้างอิงของสถานะคำสั่งซื้อเริ่มต้นของ WooCommerce และทากที่เกี่ยวข้อง
- การชำระเงินที่รอดำเนินการ – wc-pending
- ล้มเหลว – wc-failed
- กำลังประมวลผล – wc-processing
- เสร็จสมบูรณ์ – wc-เสร็จสมบูรณ์
- ถือ - wc-on-hold
- ยกเลิก – wc-cancelled
- Refunded – wc-refunded
การเพิ่มสถานะคำสั่งซื้อใน URL โดยตรงไม่ใช่วิธีที่ดีที่สุด แต่แนวคิดของโพสต์นี้คือการแสดงวิธีการบรรลุวัตถุประสงค์
คุณได้ลองใช้วิธีการอื่นในการกรองคำสั่งซื้อตามสถานะคำสั่งซื้อใน WooCommerce หรือไม่? ฉันชอบที่จะรู้จักพวกเขา