Bagaimana cara memfilter pesanan WooCommerce dengan beberapa status pesanan?

Diterbitkan: 2019-02-16

Salah satu pelanggan kami baru-baru ini menanyakan pertanyaan ini kepada kami untuk halaman Pesanan WooCommerce mereka di admin: Apakah ada cara untuk memilih beberapa status di backend pesanan?

Meskipun pemilik toko WooCommerce mungkin tidak perlu melakukan ini secara teratur, tetapi ini pasti akan membantu beberapa dari mereka.

Posting ini akan menjelaskan cara menampilkan pesanan WooCommerce dengan status berbeda dalam satu tampilan. Di paruh kedua posting ini, kami juga akan memeriksa cara mengecualikan satu atau beberapa status saat semua pesanan ditampilkan.

Perilaku default WooCommerce adalah Anda dapat melihat Semua pesanan, atau pesanan untuk satu status apa pun . Tetapi Anda tidak dapat melihat pesanan dengan status yang berbeda secara bersamaan, seperti pesanan Tertunda & Pengembalian Dana. Atau Anda tidak dapat mengecualikan pesanan status dalam tampilan Semua.

WooCommerce Orders in Admin
Tampilan halaman Pesanan WooCommerce Default

Terlepas dari status pesanan default, saya telah menambahkan status pesanan khusus: Terkirim . Ini telah ditambahkan menggunakan plugin Status Pesanan Kustom & ditambahkan untuk memverifikasi bahwa pemfilteran juga akan berfungsi dengan status pesanan khusus bersama dengan status default.

Bagian 1: Filter Pesanan WooCommerce untuk menampilkan pesanan beberapa status dalam satu tampilan

Ada beberapa cara untuk mencari solusi untuk ini. Itu bisa melalui plugin, atau dengan menambahkan dropdown multi-pilih status pesanan dengan cuplikan kode. Atau cara kasar, cukup tambahkan status yang Anda inginkan di URL.

Ini jelas bukan cara terbaik, tetapi berhasil. Saya dapat kembali lagi nanti ke posting ini & memperbaruinya untuk menyertakan dropdown multi-pilih dari status pesanan WooCommerce.

Mari kita lihat kodenya terlebih dahulu.

 /**
 * Menangani filter untuk menyertakan status woocommerce tambahan
 *
 * @param array $query_vars Kueri vars.
 * @return array
 */
function ts_woocommerce_include_order_status( $query_vars ) {
  global $typenow;

  /**
   * Menggunakan wc_get_order_types() alih-alih 'shop_order' karena jenis pesanan lain dapat ditambahkan oleh plugin lain
   */
  if ( in_array( $typenow, wc_get_order_types( 'order-meta-box' ), true ) ) {
    if ( isset( $_GET['include_status'] ) && '' != $_GET['include_status']
       && isset( $query_vars['post_status'] ) ) {
      $include_status = meledak( ',', $_GET['include_status'] );
      $q_post_status[] = $query_vars['post_status'];
      $query_vars['post_status'] = array_merge( $q_post_status, $include_status );
    }
  }
  kembalikan $query_vars;
}
add_filter( 'permintaan', 'ts_woocommerce_include_order_status', 20, 1 );

Kami melakukan beberapa hal dalam cuplikan di atas.

Pertama, kami melampirkan fungsi kami ke filter permintaan WordPress.

Karena kami ingin kode kami berjalan hanya untuk halaman Pesanan WooCommerce, kami melakukannya dengan memastikan bahwa variabel $typenow ada dalam array yang dikembalikan dari fungsi wc_get_order_types() . Dalam hal ini, $typenow diatur ke shop_order . Itu adalah post_type dari pesanan yang dibuat oleh WooCommerce.

include_status adalah variabel GET di mana Anda harus melewati status pesanan lain yang ingin Anda tampilkan. Beberapa status pesanan dapat dilewati dengan dipisahkan koma. Anda harus terlebih dahulu memfilter pesanan berdasarkan 1 status pesanan yang ingin Anda lihat. Katakanlah Anda memfilter berdasarkan pending order.

WooCommerce Orders with Pending status
Pesanan WooCommerce dengan status Tertunda

Jika Anda ingin melihat pesanan yang Dikembalikan bersama dengan pesanan Tertunda, itu tidak mungkin. Namun, jika Anda menambahkan cuplikan kode di atas di functions.php tema anak Anda, dan kemudian jika Anda mengubah URL halaman Pesanan ke tautan di bawah ini di browser Anda:

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

Anda akan melihat bahwa pesanan Tertunda serta Dikembalikan akan muncul.

WooCommerce orders with status as Pending & Refunded being shown
Pesanan WooCommerce dengan status sebagai Tertunda & Dikembalikan sedang ditampilkan

Dalam parameter include_status, Anda juga dapat melewati beberapa status pesanan yang dipisahkan koma. Jadi jika Anda ingin melihat pesanan Tertunda, Dikembalikan & Terkirim, Anda dapat melakukannya dengan mengubah URL seperti di bawah ini:

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

Penting untuk dicatat bahwa Terkirim adalah status khusus yang telah saya tambahkan dalam pengujian pemasangan WooCommerce saya. Siputnya dikirim melalui wc. Status ditambahkan dengan plugin Status Pesanan Kustom.

Saat Anda membuka tautan di atas, Anda akan melihat pesanan dengan 3 status tersebut:

WooCommerce orders with status as Pending, Refunded & Delivered being shown
Pesanan WooCommerce dengan status sebagai Tertunda, Dikembalikan & Dikirim ditampilkan

Koma di URL diganti dengan %2C karena pengkodean URL.

Bagian 2: Filter Pesanan WooCommerce untuk menyembunyikan pesanan dari satu atau lebih status di tampilan Semua

Secara default, Anda disajikan dengan tampilan di mana pesanan WooCommerce dari semua status ditampilkan di halaman Pesanan.

WooCommerce Orders in Admin

Saya telah membuat cuplikan kode di bawah ini yang memungkinkan Anda meneruskan variabel di URL, kecualikan_status . Dalam variabel kecualikan_status, Anda dapat meneruskan siput status yang ingin Anda kecualikan agar tidak ditampilkan pada halaman Pesanan dalam tampilan Semua. Berikut kodenya:

 /**
 * Menangani filter untuk mengecualikan status woocommerce dari tampilan Semua pesanan
 *
 * @param array $query_vars Kueri vars.
 * @return array
 */
function ts_woocommerce_exclude_order_status( $query_vars ) {
  global $typenow;

  /**
   * Menggunakan wc_get_order_types() alih-alih 'shop_order' karena jenis pesanan lain dapat ditambahkan oleh plugin lain
   */
  if ( in_array( $typenow, wc_get_order_types( 'order-meta-box' ), true ) ) {
    if ( isset( $_GET['exclude_status'] ) && '' != $_GET['exclude_status']
       && isset( $query_vars['post_status'] ) ) {
      $exclude_status = meledak( ',', $_GET['exclude_status'] );
      foreach ( $exclude_status as $key => $value ) {
        if ( ( $key = array_search( $value, $query_vars['post_status'] ) ) !== false) {
          unset( $query_vars['post_status'][$key] );
        }
      }
    }
  }
  kembalikan $query_vars;
}
add_filter( 'permintaan', 'ts_woocommerce_exclude_order_status', 20, 1 );

Ketika kode di atas ditambahkan ke file functions.php tema anak Anda, dan kemudian jika Anda mengubah URL halaman Pesanan WooCommerce Anda ke yang di bawah ini:

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

Maka pesanan dengan status Tertunda tidak akan ditampilkan di tampilan default Semua pesanan:

Excludes Pending orders from being displayed from all orders view
Tidak termasuk pesanan Tertunda agar tidak ditampilkan dari semua tampilan pesanan

Anda juga dapat menentukan beberapa status pesanan untuk dikecualikan. Mereka harus dipisahkan dengan koma. Memperluas contoh di atas, jika Anda ingin menyembunyikan pesanan Tertunda & Terkirim dari tampilan Semua, maka Anda dapat mengubah URL halaman Pesanan menjadi:

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

Halaman Pesanan tidak akan lagi menampilkan pesanan Tertunda & Terkirim pada tampilan Semua:

Excludes Pending & Delivered orders from being displayed from all orders view
Tidak termasuk pesanan Tertunda & Terkirim agar tidak ditampilkan dari semua tampilan pesanan

Berikut adalah referensi status pesanan WooCommerce default & siputnya masing-masing.

  • Pembayaran tertunda – wc-tertunda
  • Gagal – wc-gagal
  • Pemrosesan – pemrosesan wc
  • Selesai – wc-selesai
  • Ditahan – wc-ditahan
  • Dibatalkan – wc-dibatalkan
  • Dikembalikan - wc-dikembalikan

Menambahkan status pesanan di URL secara langsung bukanlah pendekatan terbaik. Tetapi ide dari posting ini adalah untuk menunjukkan bagaimana tujuan tersebut dapat dicapai.

Sudahkah Anda mencoba pendekatan lain untuk memfilter pesanan berdasarkan status pesanan di WooCommerce? Saya ingin sekali mengenal mereka.