Comment filtrer les commandes WooCommerce par plusieurs statuts de commande ?
Publié: 2019-02-16Un de nos clients nous a récemment posé cette question pour sa page de commandes WooCommerce dans l'administration : Existe-t-il un moyen de sélectionner plusieurs statuts dans le backend de commande ?
Bien que les propriétaires de magasins WooCommerce n'aient peut-être pas besoin de le faire régulièrement, cela aiderait certainement certains d'entre eux.
Cet article explique comment afficher les commandes WooCommerce avec différents statuts dans une seule vue. Dans la 2ème moitié de cet article, nous verrons également comment exclure un ou plusieurs statuts lorsque toutes les commandes sont affichées.
Le comportement par défaut de WooCommerce est que vous pouvez afficher toutes les commandes ou les commandes pour n'importe quel statut . Mais vous ne pouvez pas afficher les commandes de statuts différents ensemble, comme les commandes en attente et remboursées. Ou vous ne pouvez pas exclure les commandes d'un statut dans la vue Tout.

Outre les statuts de commande par défaut, j'ai ajouté un statut de commande personnalisé : Livré . Cela a été ajouté à l'aide du plug-in Custom Order Status et est ajouté pour vérifier que le filtrage fonctionnerait également avec les statuts de commande personnalisés ainsi que les statuts par défaut.
Partie 1 : Filtrer les commandes WooCommerce pour afficher les commandes de plusieurs statuts dans une seule vue
Il existe plusieurs façons de rechercher une solution à cela. Cela peut être soit via un plugin, soit en ajoutant une liste déroulante à sélection multiple du statut de la commande avec un extrait de code. Ou d'une manière grossière, ajoutez simplement le statut que vous voulez dans l'URL.
Ce n'est certainement pas la meilleure façon, mais ça marche. Je reviendrai peut-être plus tard sur cet article et le mettrai à jour pour inclure une liste déroulante à sélection multiple des statuts de commande WooCommerce.
Regardons d'abord le code.
/** * Gérer les filtres pour inclure des statuts woocommerce supplémentaires * * @param array $query_vars Requête vars. * tableau @return */ fonction ts_woocommerce_include_order_status( $query_vars ) { global $typenow ; /** * Utilisation de wc_get_order_types() au lieu de 'shop_order' car d'autres types de commandes pourraient être ajoutés par d'autres plugins */ 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 = éclater( ',', $_GET['include_status'] ); $q_post_status[] = $query_vars['post_status'] ; $query_vars['post_status'] = array_merge( $q_post_status, $include_status ); } } retourne $query_vars ; } add_filter( 'request', 'ts_woocommerce_include_order_status', 20, 1 );
Nous faisons quelques choses dans l'extrait ci-dessus.
Tout d'abord, nous attachons notre fonction au filtre de requête de WordPress.
Parce que nous voulons que notre code ne s'exécute que pour la page Commandes WooCommerce, nous le faisons en nous assurant que la variable $typenow est présente dans le tableau renvoyé par la fonction wc_get_order_types(). Dans ce cas, $typenow est défini sur shop_order . C'est le post_type des commandes créées par WooCommerce.
include_status est la variable GET dans laquelle vous devez passer d'autres statuts de commande que vous souhaitez afficher. Plusieurs statuts de commande peuvent être passés séparés par des virgules. Vous devez d'abord filtrer la commande par n'importe quel statut de commande que vous souhaitez voir. Supposons que vous ayez filtré par commandes en attente.

Si vous souhaitez voir les commandes remboursées avec les commandes en attente, ce n'est pas possible. Cependant, si vous ajoutez l'extrait de code ci-dessus dans le fichier functions.php de votre thème enfant, puis si vous modifiez l'URL de la page Commandes avec le lien ci-dessous dans votre navigateur :
<your_store_url>/wp-admin/edit.php?post_status=wc-pending&post_type=shop_order&include_status=wc-refunded
vous verrez que les commandes en attente ainsi que les commandes remboursées apparaîtront.

Dans le paramètre include_status, vous pouvez également passer plusieurs statuts de commande séparés par des virgules. Donc, si vous souhaitez afficher les commandes en attente, remboursées et livrées, vous pouvez le faire en modifiant l'URL comme ci-dessous :

<your_store_url>/wp-admin/edit.php?post_status=wc-pending&post_type=shop_order&include_status=wc-refunded,wc-delivered
Il est important de noter que Livré est un statut personnalisé que j'ai ajouté dans mon installation de test WooCommerce. C'est slug est wc-livré. Le statut est ajouté avec le plugin Custom Order Status.
Lorsque vous ouvrez le lien ci-dessus, vous verrez les commandes avec ces 3 statuts :

La virgule dans l'URL est remplacée par %2C en raison de l'encodage de l'URL.
Partie 2 : Filtrer les commandes WooCommerce pour masquer les commandes d'un ou plusieurs statuts dans la vue Tout
Par défaut, vous êtes présenté avec une vue où les commandes WooCommerce de tous les statuts sont affichées sur la page Commandes.
J'ai créé ci-dessous un extrait de code qui vous permet de passer une variable dans l'URL, exclude_status . Dans la variable exclude_status, vous pouvez passer le slug du statut que vous souhaitez exclure de l'affichage sur la page Commandes dans la vue Toutes. Voici le code :
/** * Gérer les filtres pour exclure les statuts woocommerce de la vue Toutes les commandes * * @param array $query_vars Requête vars. * tableau @return */ fonction ts_woocommerce_exclude_order_status( $query_vars ) { global $typenow ; /** * Utilisation de wc_get_order_types() au lieu de 'shop_order' car d'autres types de commandes pourraient être ajoutés par d'autres plugins */ 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 = exploser( ',', $_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] ); } } } } retourne $query_vars ; } add_filter( 'demande', 'ts_woocommerce_exclude_order_status', 20, 1 );
Lorsque le code ci-dessus est ajouté dans le fichier functions.php de votre thème enfant, puis si vous changez l'URL de votre page Commandes WooCommerce en celle ci-dessous :
<your_store_url>/wp-admin/edit.php?post_type=shop_order&exclude_status=wc-pending
Ensuite, les commandes avec le statut En attente ne seront pas affichées dans la vue par défaut de Toutes les commandes :

Vous pouvez également spécifier plusieurs statuts de commande à exclure. Ils doivent être séparés par une virgule. En développant l'exemple ci-dessus, si vous souhaitez masquer les commandes en attente et livrées de la vue Toutes, vous pouvez modifier l'URL de votre page Commandes en :
<your_store_url>/woocommerce/wp-admin/edit.php?post_type=shop_order&exclude_status=wc-pending,wc-delivered
La page Commandes n'affichera plus les commandes en attente et livrées dans la vue Toutes :

Voici une référence des statuts de commande WooCommerce par défaut et de leurs slugs respectifs.
- En attente de paiement – wc-pending
- Échec - wc-échec
- Traitement – wc-traitement
- Terminé - wc-terminé
- En attente - wc en attente
- Annulé – wc-annulé
- Remboursé - wc-remboursé
L'ajout direct des statuts de commande dans l'URL n'est pas la meilleure approche. Mais l'idée de ce post est de montrer comment l'objectif peut être atteint.
Avez-vous essayé une autre approche pour filtrer les commandes par statut de commande dans WooCommerce ? J'aimerais les connaître.