Cum se filtrează comenzile WooCommerce după mai multe stări ale comenzii?
Publicat: 2019-02-16Unul dintre clienții noștri ne-a pus recent această întrebare pentru pagina lor de comenzi WooCommerce în administrator: Există o modalitate de a selecta mai multe stări în backend-ul comenzii?
Deși proprietarii de magazine WooCommerce nu trebuie să facă acest lucru în mod regulat, dar acest lucru i-ar ajuta cu siguranță pe unii dintre ei.
Această postare va explica cum să afișați comenzile WooCommerce cu diferite stări într-o singură vizualizare. În a doua jumătate a acestei postări, vom verifica, de asemenea, cum să excludem una sau mai multe stări atunci când toate comenzile sunt afișate.
Comportamentul implicit al WooCommerce este că puteți vizualiza fie Toate comenzile, fie comenzile pentru orice stare . Dar nu puteți vizualiza împreună comenzi de diferite stări, cum ar fi comenzile în așteptare și rambursate. Sau nu puteți exclude comenzile unei stări în vizualizarea Toate.

Pe lângă stările implicite ale comenzii, am adăugat o stare personalizată a comenzii: Livrată . Aceasta a fost adăugată utilizând pluginul Custom Order Status și este adăugat pentru a verifica dacă filtrarea ar funcționa și cu stările personalizate ale comenzii împreună cu stările implicite.
Partea 1: Filtrați comenzile WooCommerce pentru a afișa comenzile cu mai multe stări într-o singură vizualizare
Există mai multe moduri de a căuta o soluție pentru aceasta. Poate fi fie prin intermediul unui plugin, fie prin adăugarea unui meniu derulant cu selecție multiplă a stării comenzii cu un fragment de cod. Sau într-un mod brut, pur și simplu adăugați starea dorită în adresa URL.
Cu siguranță nu este cel mai bun mod, dar funcționează. S-ar putea să revin mai târziu la această postare și să o actualizez pentru a include un meniu derulant cu selecție multiplă a stărilor comenzilor WooCommerce.
Să ne uităm mai întâi la cod.
/** * Gestionați filtrele pentru a include stări suplimentare woocommerce * * @param array $query_vars Interogare vars. * @return matrice */ funcția ts_woocommerce_include_order_status( $query_vars ) { global $typenow; /** * Folosind wc_get_order_types() în loc de „shop_order”, deoarece alte tipuri de comenzi ar putea fi adăugate de alte pluginuri */ 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 = explode( ',', $_GET['include_status'] ); $q_post_status[] = $query_vars['post_status']; $query_vars['post_status'] = array_merge( $q_post_status, $include_status ); } } returnează $query_vars; } add_filter('cerere', 'ts_woocommerce_include_order_status', 20, 1);
Facem câteva lucruri în fragmentul de mai sus.
În primul rând, atașăm funcția noastră la filtrul de solicitare al WordPress.
Deoarece dorim ca codul nostru să ruleze numai pentru pagina Comenzi WooCommerce, facem asta asigurându-ne că variabila $typenow este prezentă în matricea returnată de funcția wc_get_order_types(). În acest caz, $typenow este setat la shop_order . Acesta este tipul_post al comenzilor care sunt create de WooCommerce.
include_status este variabila GET în care ar trebui să treceți alte stări ale comenzii pe care doriți să le afișați. Mai multe stări de comandă pot fi transmise separate prin virgulă. Mai întâi trebuie să filtrați comanda după orice stare de comandă pe care doriți să o vedeți. Să presupunem că ați filtrat după comenzile în așteptare.

Dacă doriți să vedeți comenzile rambursate împreună cu comenzile în așteptare, acest lucru nu este posibil. Cu toate acestea, dacă adăugați fragmentul de cod de mai sus în funcțiile.php al temei copilului și apoi dacă modificați adresa URL a paginii Comenzi la linkul de mai jos din browser:
<your_store_url>/wp-admin/edit.php?post_status=wc-pending&post_type=shop_order&include_status=wc-refunded
veți vedea că vor apărea comenzile în așteptare și rambursate.

În parametrul include_status, puteți, de asemenea, să transmiteți mai multe stări de ordine, separate prin virgulă. Deci, dacă doriți să vizualizați comenzile în așteptare, rambursate și livrate, puteți face acest lucru schimbând adresa URL după cum urmează:

<your_store_url>/wp-admin/edit.php?post_status=wc-pending&post_type=shop_order&include_status=wc-refunded,wc-delivered
Este important să rețineți că Livrat este o stare personalizată pe care am adăugat-o în instalarea mea de testare WooCommerce. Limacul este livrat la WC. Starea este adăugată cu pluginul Custom Order Status.
Când deschideți linkul de mai sus, veți vedea comenzile cu acele 3 stări:

Virgula din adresa URL este înlocuită cu %2C din cauza codificării URL.
Partea 2: Filtrați comenzile WooCommerce pentru a ascunde comenzile cu una sau mai multe stări în vizualizarea Toate
În mod implicit, vi se prezintă o vizualizare în care comenzile WooCommerce de toate stările sunt afișate pe pagina Comenzi.
Am creat mai jos un fragment de cod care vă permite să treceți o variabilă în adresa URL, exclude_status . În variabila exclude_status, puteți trece slug-ul stării pe care doriți să-l excludeți de la afișarea în pagina Comenzi în vizualizarea Toate. Iată codul:
/** * Gestionați filtrele pentru excluderea stărilor woocommerce din vizualizarea Toate comenzile * * @param array $query_vars Interogare vars. * @return matrice */ funcția ts_woocommerce_exclude_order_status( $query_vars ) { global $typenow; /** * Folosind wc_get_order_types() în loc de „shop_order”, deoarece alte tipuri de comenzi ar putea fi adăugate de alte pluginuri */ if ( in_array( $typenow, wc_get_order_types('order-meta-boxes' ), true ) ) { if ( isset( $_GET['exclude_status'] ) && '' != $_GET['exclude_status'] && isset( $query_vars['post_status'] ) ) { $exclude_status = explode( ',', $_GET['exclude_status'] ); foreach ( $exclude_status ca $cheie => $valoare ) { if ( ( $key = array_search( $value, $query_vars['post_status'] ) ) !== false) { unset( $query_vars['post_status'][$key] ); } } } } returnează $query_vars; } add_filter('cerere', 'ts_woocommerce_exclude_order_status', 20, 1);
Când codul de mai sus este adăugat în fișierul functions.php al temei copilului și apoi dacă modificați adresa URL a paginii dvs. de comenzi WooCommerce la cea de mai jos:
<your_store_url>/wp-admin/edit.php?post_type=shop_order&exclude_status=wc-pending
Apoi, comenzile cu starea În așteptare nu vor fi afișate în vizualizarea implicită a Toate comenzile:

De asemenea, puteți specifica mai multe stări de comandă de exclus. Ele trebuie separate prin virgulă. Expandând exemplul de mai sus, dacă doriți să ascundeți comenzile în așteptare și livrate din vizualizarea Toate, atunci puteți modifica adresa URL a paginii Comenzi în:
<your_store_url>/woocommerce/wp-admin/edit.php?post_type=shop_order&exclude_status=wc-pending,wc-delivered
Pagina Comenzi nu va mai afișa comenzile în așteptare și livrate în vizualizarea Toate:

Iată o referință pentru stările implicite ale comenzilor WooCommerce și slug-urile acestora.
- Plată în așteptare – wc-pending
- Failed – wc-failed
- Procesare – procesare wc
- Finalizat – wc-terminat
- În așteptare – wc-în așteptare
- Anulat – wc-anulat
- Rambursat – rambursat wc
Adăugarea directă a stărilor comenzii în adresa URL nu este cea mai bună abordare. Dar ideea acestei postări este să arate cum poate fi atins obiectivul.
Ați încercat vreo altă abordare pentru filtrarea comenzilor după stările comenzii în WooCommerce? Mi-ar plăcea să-i cunosc.