WooCommerce siparişlerini birden çok sipariş durumuna göre nasıl filtreleyebilirim?
Yayınlanan: 2019-02-16Müşterilerimizden biri kısa süre önce yöneticideki WooCommerce Siparişleri sayfası için bize şu soruyu sordu: Sipariş arka ucunda birden fazla durum seçmenin bir yolu var mı?
WooCommerce mağaza sahiplerinin bunu düzenli olarak yapması gerekmese de, bu kesinlikle bazılarına yardımcı olacaktır.
Bu gönderi, farklı durumlara sahip WooCommerce siparişlerinin tek bir görünümde nasıl gösterileceğini açıklayacaktır. Bu gönderinin ikinci yarısında, tüm siparişler görüntülenirken bir veya birden fazla durumun nasıl hariç tutulacağını da kontrol edeceğiz.
WooCommerce'in varsayılan davranışı, tüm siparişleri veya herhangi bir durum için siparişleri görüntüleyebilmenizdir . Ancak Bekleyen ve Para İadesi Yapılan siparişler gibi farklı durumlardaki siparişleri birlikte görüntüleyemezsiniz. Veya bir durumun sıralarını Tümü görünümünde hariç tutamazsınız.

Varsayılan sipariş durumlarının yanı sıra özel bir sipariş durumu ekledim: Teslim edildi . Bu, Özel Sipariş Durumu eklentisi kullanılarak eklendi ve filtrelemenin varsayılan durumlarla birlikte özel sipariş durumlarıyla da çalışacağını doğrulamak için eklendi.
Bölüm 1: Birden çok durumdaki siparişleri tek bir görünümde göstermek için WooCommerce Siparişlerini Filtreleyin
Bunun için bir çözüm aramanın birden fazla yolu vardır. Bu, bir eklenti aracılığıyla veya bir kod parçacığı ile sipariş durumunun çoklu seçim açılır listesini ekleyerek olabilir. Veya kaba bir şekilde, URL'ye istediğiniz durumu eklemeniz yeterlidir.
Kesinlikle en iyi yol değil, ama işe yarıyor. Bu gönderiye daha sonra geri dönebilir ve WooCommerce sipariş durumlarının çok seçimli bir açılır listesini içerecek şekilde güncelleyebilirim.
Önce koda bakalım.
/** * Ek woocommerce durumları dahil etmek için filtreleri kullanın * * @param dizisi $query_vars Sorgu değişkenleri. * @dönüş dizisi */ function ts_woocommerce_include_order_status( $query_vars ) { küresel $typenow; /** * 'shop_order' yerine wc_get_order_types() kullanılması, diğer sipariş türleri diğer eklentiler tarafından eklenebilir */ 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 = patlat(',', $_GET['include_status'] ); $q_post_status[] = $query_vars['post_status']; $query_vars['post_status'] = array_merge( $q_post_status, $include_status ); } } $query_vars döndür; } add_filter('istek', 'ts_woocommerce_include_order_status', 20, 1 );
Yukarıdaki snippet'te birkaç şey yapıyoruz.
İlk olarak, fonksiyonumuzu WordPress'in istek filtresine ekliyoruz.
Kodumuzun yalnızca WooCommerce Siparişleri sayfası için çalışmasını istediğimizden, bunu wc_get_order_types() işlevinden döndürülen dizide $typenow değişkeninin mevcut olduğundan emin olarak yaparız. Bu durumda, $typenow shop_order olarak ayarlanır. Bu, WooCommerce tarafından oluşturulan siparişlerin post_type'ıdır.
include_status , görüntülenmesini istediğiniz diğer sipariş durumlarını iletmeniz gereken GET değişkenidir. Birden fazla sipariş durumu virgülle ayrılmış olarak geçirilebilir. Önce siparişi, görmek istediğiniz herhangi bir 1 sipariş durumuna göre filtrelemelisiniz. Diyelim ki bekleyen siparişlere göre filtreleme yaptınız.

Bekleyen siparişler ile birlikte Para İadesi Yapılan siparişleri görmek istiyorsanız, bu mümkün değildir. Ancak, yukarıdaki kod parçacığını alt temanızın function.php dosyasına eklerseniz ve ardından Siparişler sayfasının URL'sini tarayıcınızda aşağıdaki bağlantıya değiştirirseniz:
<your_store_url>/wp-admin/edit.php?post_status=wc-pending&post_type=shop_order&include_status=wc-iadesi yapıldı
Bekleyen ve İade Edilen siparişlerin görüneceğini göreceksiniz.

include_status parametresinde, virgülle ayrılmış birden çok sipariş durumu da iletebilirsiniz. Dolayısıyla, Bekleyen, Para İadesi Yapılan ve Teslim Edilen siparişleri görüntülemek istiyorsanız, URL'yi aşağıdaki gibi değiştirerek bunu yapabilirsiniz:

<your_store_url>/wp-admin/edit.php?post_status=wc-pending&post_type=shop_order&include_status=wc-geri ödemesi yapıldı,wc-teslimat edildi
Teslim Edildi'nin, test WooCommerce kurulumuma eklediğim özel bir durum olduğunu unutmamak önemlidir. Slug wc olarak teslim edilir. Durum, Özel Sipariş Durumu eklentisi ile eklenir.
Yukarıdaki bağlantıyı açtığınızda, şu 3 statüye sahip siparişleri göreceksiniz:

URL kodlaması nedeniyle URL'deki virgül %2C ile değiştirilir.
Bölüm 2: Tümü görünümünde bir veya daha fazla durumun siparişlerini gizlemek için WooCommerce Siparişlerini Filtreleyin
Varsayılan olarak, tüm durumların WooCommerce siparişlerinin Siparişler sayfasında gösterildiği bir görünüm sunulur.
URL'de bir değişken iletmenize izin veren aşağıdaki kod parçacığını oluşturdum, clude_status . Exclusion_status değişkeninde, hariç tutmak istediğiniz durum bilgisini Tümü görünümündeki Siparişler sayfasında görüntülenmesinden geçirebilirsiniz. İşte kod:
/** * Tüm siparişler görünümünden woocommerce durumlarını hariç tutmak için filtreleri kullanın * * @param dizisi $query_vars Sorgu değişkenleri. * @dönüş dizisi */ function ts_woocommerce_exclude_order_status( $query_vars ) { küresel $typenow; /** * 'shop_order' yerine wc_get_order_types() kullanılması, diğer sipariş türleri diğer eklentiler tarafından eklenebilir */ 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 = patlat(',', $_GET['exclude_status'] ); foreach ( $exclude_status as $key => $değer ) { if ( ( $anahtar = array_search( $değer, $query_vars['post_status'] ) ) !== yanlış) { unset( $query_vars['post_status'][$anahtar]); } } } } $query_vars döndür; } add_filter( 'istek', 'ts_woocommerce_exclude_order_status', 20, 1 );
Alt temanızın function.php dosyasına yukarıdaki kod eklendiğinde ve ardından WooCommerce Siparişler sayfanızın URL'sini aşağıdakiyle değiştirirseniz:
<your_store_url>/wp-admin/edit.php?post_type=shop_order&exclude_status=wc-beklemede
Ardından, Bekleyen durumundaki siparişler, Tüm siparişlerin varsayılan görünümünde görüntülenmez:

Ayrıca, hariç tutmak için birden fazla sipariş durumu belirtebilirsiniz. Virgülle ayrılmaları gerekir. Yukarıdaki örneği genişleterek, Bekleyen ve Teslim Edilen siparişleri Tümü görünümünden gizlemek istiyorsanız, Siparişler sayfanızın URL'sini şu şekilde değiştirebilirsiniz:
<your_store_url>/woocommerce/wp-admin/edit.php?post_type=shop_order&exclude_status=wc-beklemede,wc-teslim edildi
Siparişler sayfası artık Tümü görünümünde Bekleyen ve Teslim Edilen siparişleri göstermeyecek:

İşte varsayılan WooCommerce sipariş durumlarının ve ilgili sümüklü böceklerin bir referansı.
- Bekleyen ödeme – wc-beklemede
- Başarısız – wc-başarısız
- İşleme – wc-işleme
- Tamamlandı – wc tamamlandı
- Beklemede – wc-beklemede
- İptal edildi – wc-iptal edildi
- İade – wc-iade
Sipariş durumlarını doğrudan URL'ye eklemek en iyi yaklaşım değildir. Ancak bu yazının amacı, hedefe nasıl ulaşılabileceğini göstermektir.
WooCommerce'de siparişleri sipariş durumlarına göre filtrelemek için başka bir yaklaşım denediniz mi? Onları tanımayı çok isterim.