Rechercher dans les commandes WooCommerce
Les commandes WooCommerce contiennent beaucoup d'informations et sont parfois difficiles à rechercher efficacement. SearchWP peut être configuré pour rechercher rapidement les commandes WooCommerce.
Remarque : Vous aurez besoin de l'extension Intégration WooCommerce de SearchWP active pour ce processus.
Étape 1 : Rendre les commandes WooCommerce recherchables
Par défaut, SearchWP ne listera pas les commandes WooCommerce comme source car ce type de contenu particulier n'est pas public par conception. Les commandes WooCommerce contiennent des informations sensibles et des précautions supplémentaires doivent être prises lors de modifications de ce type !
Utilisez les hooks suivants pour ajouter les commandes WooCommerce en tant que source SearchWP :
All hooks should be added to your custom SearchWP Customizations Plugin.
| <?php | |
| // Add WooCommerce Orders as a SearchWP Source. | |
| // @link https://searchwp.com/documentation/knowledge-base/search-woocommerce-orders/ | |
| add_action( 'plugins_loaded', function() { | |
| if ( class_exists( 'WooCommerce' ) ) { | |
| add_filter( 'searchwp\sources', function( $sources ) { | |
| $sources[] = new \SearchWP\Sources\Post( 'shop_order' ); | |
| return $sources; | |
| } ); | |
| add_filter( 'searchwp\post_stati\shop_order', function( $post_stati ) { | |
| return array_merge( $post_stati, [ | |
| 'wc-pending', | |
| 'wc-processing', | |
| 'wc-on-hold', | |
| 'wc-completed', | |
| 'wc-cancelled', | |
| 'wc-refunded', | |
| 'wc-failed', | |
| ] ); | |
| } ); | |
| } | |
| } ); |
Étape 2 : Créer un moteur supplémentaire pour les recherches d'administration
Ensuite, créez un moteur SearchWP supplémentaire à utiliser pour les recherches d'administration :
Remarque : Ce moteur sera utilisé pour toutes les recherches dans l'administration car cette case a été cochée lors de la configuration. Vous pouvez omettre toute source de ce moteur et SearchWP ignorera les recherches d'administration pour ces sources, en revenant à la valeur par défaut de WordPress.
Voici les étapes suivies pour créer ce moteur de recherche d'administration :
- Cliquez sur le bouton Ajouter dans l'onglet Moteurs des paramètres de SearchWP
- Cliquez sur le bouton Sources et paramètres pour le moteur nouvellement créé
- Activez les sources applicables pour ce moteur (en vous assurant d'inclure les Commandes)
- Important : Cochez la case Moteur d'administration
- Cliquez sur le bouton Enregistrer les moteurs pour sauvegarder le nouveau moteur
Rechercher dans les commandes WooCommerce
Une fois l'index traité vos commandes WooCommerce existantes, elles seront désormais recherchables dans l'administration WordPress !
Remarque : Certains aspects des commandes WooCommerce peuvent nécessiter une intégration supplémentaire :
Rendre les données des articles de commande recherchables
Si vous souhaitez rendre les données des articles de commande (par exemple, les numéros de SKU de produit pour les articles de commande) recherchables, vous pouvez personnaliser les données indexées pour chaque commande afin d'inclure toutes les données d'article de commande que vous souhaitez. Dans cet extrait, nous rendrons le SKU, le nom du produit, le slug du produit, la description du produit, la description courte du produit et les attributs du produit recherchables pour retourner toutes les commandes correspondantes :
All hooks should be added to your custom SearchWP Customizations Plugin.
| <?php | |
| // Add WooCommerce Order item data to WooCommerce Orders Search in SearchWP. | |
| // @link https://searchwp.com/documentation/knowledge-base/search-woocommerce-orders/ | |
| add_filter( 'searchwp\entry\data', function( $data, \SearchWP\Entry $entry ) { | |
| // The Product data keys to index for each Order item. | |
| $data_to_index = [ | |
| 'sku', | |
| 'name', | |
| 'slug', | |
| 'description', | |
| 'short_description', | |
| 'attributes', | |
| ]; | |
| if ( | |
| 'post' . SEARCHWP_SEPARATOR . 'shop_order' !== $entry->get_source()->get_name() | |
| || ! function_exists( 'wc_get_order' ) | |
| || ! class_exists( 'WC_Order_Item_Product' ) | |
| || ! method_exists( 'WC_Order_Item_Product', 'get_product' ) | |
| || ! class_exists( 'WC_Product' ) | |
| || ! method_exists( 'WC_Product', 'get_data' ) | |
| ) { | |
| return $data; | |
| } | |
| $order = wc_get_order( $entry->get_id() ); | |
| $data['meta']['searchwp_wc_order_item_data'] = array_map( function ( $item ) use ( $data_to_index ) { | |
| $product = $item->get_product(); | |
| $product_data = $product->get_data(); | |
| return array_filter( array_map( function( $item_key, $item_value ) use ( $data_to_index ) { | |
| return in_array( $item_key, $data_to_index ) ? $item_value : ''; | |
| }, array_keys( $product_data ), array_values( $product_data ) ) ); | |
| }, $order->get_items() ); | |
| // We need to prevent WooCommerce from excluding the order comments from our query. | |
| remove_filter( 'comments_clauses', array( 'WC_Comments', 'exclude_order_comments' ) ); | |
| $order_comments = get_comments( array( | |
| 'post_id' => $order->get_id(), | |
| 'orderby' => 'comment_ID', | |
| 'order' => 'DESC', | |
| 'status' => 'any', | |
| 'type' => 'order_note', | |
| ) ); | |
| add_filter( 'comments_clauses', array( 'WC_Comments', 'exclude_order_comments' ) ); | |
| $notes = wp_list_pluck( $order_comments, 'comment_content' ); | |
| $data['meta']['searchwp_wc_order_notes'] = $notes; | |
| return $data; | |
| }, 20, 2 ); | |
| // Prevent WooCommerce from limiting the results to post IDs. | |
| add_filter( 'searchwp\native\args', function( $args, $query ) { | |
| if ( | |
| is_admin() | |
| && is_search() | |
| && isset( $_REQUEST['post_type'] ) | |
| && 'shop_order' == $_REQUEST['post_type'] | |
| ) { | |
| $args['post__in'] = []; | |
| } | |
| return $args; | |
| }, 10, 2 ); |
Remarque : Parce que nous avons ajouté « Toute clé méta » au moteur d'administration que nous avons créé, nous pourrons désormais rechercher également par les données des articles de commande.
Intégrer avec les filtres de commande
Par défaut, SearchWP ne s'intègre pas aux filtres d'administration qui ont été configurés. Nous pouvons intégrer la prise en charge des filtres de date de commande et de client de WooCommerce avec ce hook :
All hooks should be added to your custom SearchWP Customizations Plugin.
| <?php | |
| // @link https://searchwp.com/documentation/knowledge-base/search-woocommerce-orders/ | |
| // Add support for WooCommerce Admin filters when searching Orders with SearchWP. | |
| add_filter( 'searchwp\query\mods', function( $mods, $query ) { | |
| global $wpdb; | |
| if ( isset( $_GET['_customer_user'] ) && ! empty( $_GET['_customer_user'] ) ) { | |
| $mod = new \SearchWP\Mod( \SearchWP\Utils::get_post_type_source_name( 'shop_order' ) ); | |
| $mod->set_local_table( $wpdb->postmeta ); | |
| $mod->on( 'post_id', [ 'column' => 'id' ] ); | |
| $mod->on( 'meta_key', [ 'value' => '_customer_user' ] ); | |
| $mod->raw_where_sql( function( $runtime_mod ) use ( $wpdb ) { | |
| return $wpdb->prepare( "{$runtime_mod->get_local_table_alias()}.meta_value = %d", absint( $_GET['_customer_user'] ) ); | |
| } ); | |
| $mods[] = $mod; | |
| } | |
| if ( isset( $_GET['m'] ) && ! empty( $_GET['m'] ) ) { | |
| $mod = new \SearchWP\Mod( \SearchWP\Utils::get_post_type_source_name( 'shop_order' ) ); | |
| $mod->raw_where_sql( function( $runtime_mod ) use ( $wpdb ) { | |
| return $wpdb->prepare( "DATE_FORMAT( {$runtime_mod->get_local_table_alias()}.post_date, \"%Y%m\" ) = %d", absint( $_GET['m'] ) ); | |
| } ); | |
| $mods[] = $mod; | |
| } | |
| return $mods; | |
| }, 99, 2 ); |
Avec ce hook en place, SearchWP appliquera les limites définies par les filtres de date de commande et de client lors de la recherche de commandes WooCommerce.
Rendre les numéros de commande recherchables
Les numéros de commande sont des identifiants de publication qui ne sont pas indexés par défaut. Nous pouvons indiquer à SearchWP d'indexer les numéros de commande WooCommerce avec les autres données de commande à l'aide d'un extrait comme celui-ci :
All hooks should be added to your custom SearchWP Customizations Plugin.
| <?php | |
| // Add WooCommerce Order Numbers to WooCommerce Orders. | |
| // @link https://searchwp.com/documentation/knowledge-base/search-woocommerce-orders/ | |
| add_filter( 'searchwp\entry\data', function( $data, \SearchWP\Entry $entry ) { | |
| $my_extra_meta_key = 'searchwp_order_number'; | |
| $my_extra_meta = $entry->get_id() . ' order-' . $entry->get_id() . ' o-' . $entry->get_id(); | |
| $data['meta'][ $my_extra_meta_key ] = $my_extra_meta; | |
| return $data; | |
| }, 20, 2 ); |
Remarque : Parce que nous avons ajouté « Toute clé méta » au moteur d'administration que nous avons créé, nous pourrons désormais rechercher également par numéro de commande.
Rendre les notes de commande recherchables
Si vous vous souvenez bien, nous avons ajouté des « Commentaires » au moteur d’administration ci-dessus. WooCommerce utilise les commentaires pour les notes de commande, mais il existe une restriction supplémentaire imposée par WooCommerce en raison de la nature privée des notes de commande. Nous pouvons supprimer cette restriction pour SearchWP avec un extrait de code comme celui-ci :
All hooks should be added to your custom SearchWP Customizations Plugin.
| <?php | |
| // Make WooCommerce Order Notes searchable by SearchWP. | |
| // @link https://searchwp.com/documentation/knowledge-base/search-woocommerce-orders/ | |
| add_action( 'searchwp\source\post\attributes\comments', function() { | |
| if ( did_action( 'searchwp\indexer\batch' ) ) { | |
| remove_filter( 'comments_clauses', [ 'WC_Comments', 'exclude_order_comments' ] ); | |
| } | |
| } ); | |
| // Add Order Notes to SearchWP's Comments Source. | |
| add_filter( 'searchwp\source\comment\db_where', function( $db_where, $source ) { | |
| $db_where[0]['value'] = [ 'comment', 'order_note', ]; | |
| $db_where[0]['compare'] = 'IN'; | |
| return $db_where; | |
| }, 10, 2 ); |
Une fois cet extrait de code ajouté, vous devrez reconstruire votre index en cliquant sur le bouton Reconstruire l’index dans l’onglet Moteurs des paramètres de SearchWP, et lorsque l’index sera reconstruit, vos notes de commande WooCommerce seront également consultables.


