SearchWP Documentation

Visualizza la guida all'installazione, sfoglia la Knowledge Base, scopri i numerosi hook di SearchWP

Cerca ordini WooCommerce

Gli ordini WooCommerce contengono molte informazioni e a volte sono difficili da cercare in modo efficace. SearchWP può essere configurato per cercare rapidamente gli ordini WooCommerce.

Nota: Sarà necessario che l'estensione Integrazione WooCommerce di SearchWP sia attiva per questo processo.

Passaggio 1: Rendi ricercabili gli ordini WooCommerce

Per impostazione predefinita, SearchWP non elencherà gli ordini WooCommerce come origine perché quel particolare tipo di contenuto non è public per progettazione. Gli ordini WooCommerce contengono informazioni sensibili e occorre prestare particolare attenzione quando si apportano modifiche di questo tipo!

Utilizza i seguenti hook per aggiungere gli ordini WooCommerce come origine 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',
] );
} );
}
} );

Passaggio 2: Crea un motore supplementare per le ricerche nell'area amministrativa

Successivamente, crea un motore SearchWP supplementare da utilizzare per le ricerche nell'area amministrativa:

Configurazione del motore ordini di WooCommerce di SearchWP

Nota: Questo motore verrà utilizzato per tutte le ricerche nell'area amministrativa perché la casella di controllo è stata selezionata durante la configurazione. Puoi omettere qualsiasi origine da questo motore e SearchWP salterà le ricerche nell'area amministrativa per tali origini, tornando al comportamento predefinito di WordPress.

Ecco i passaggi che sono stati eseguiti per creare questo motore di ricerca per l'area amministrativa:

  1. Fai clic sul pulsante Aggiungi nuovo nella scheda Motori della schermata delle impostazioni di SearchWP
  2. Fai clic sul pulsante Origini e impostazioni per il motore appena creato
  3. Abilita le origini applicabili per questo motore (assicurandoti di includere Ordini)
  4. Importante: Seleziona la casella di controllo Motore amministrativo
  5. Fai clic sul pulsante Salva motori per salvare il nuovo motore

Cerca ordini WooCommerce

Una volta che l'indice ha elaborato i tuoi ordini WooCommerce esistenti, saranno ora ricercabili nell'area amministrativa di WordPress!

Nota: Ci sono alcuni aspetti degli ordini WooCommerce che potrebbero richiedere un'ulteriore integrazione:

Rendere ricercabili i dati degli articoli dell'ordine

Se desideri rendere ricercabili i dati degli articoli dell'ordine (ad es. i codici SKU dei prodotti per gli articoli dell'ordine), puoi personalizzare i dati indicizzati per ciascun ordine per includere qualsiasi dato degli articoli dell'ordine desideri. In questo snippet renderemo ricercabili SKU, Nome prodotto, Slug prodotto, Descrizione prodotto, Breve descrizione prodotto e Attributi prodotto per restituire eventuali ordini corrispondenti:

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 );

Nota: Poiché abbiamo aggiunto 'Qualsiasi chiave meta' al motore amministrativo che abbiamo creato, saremo ora in grado di cercare anche per dati degli articoli dell'ordine.

Integrare con i filtri degli ordini

Per impostazione predefinita, SearchWP non si integra con alcun filtro dell'area amministrativa che è stato impostato. Possiamo integrare il supporto per i filtri Data ordine e Cliente di WooCommerce con questo 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 );

Con questo hook attivo, SearchWP applicherà i limiti definiti dai filtri Data ordine e Cliente durante la ricerca degli ordini WooCommerce.

Rendere ricercabili i numeri d'ordine

I numeri d'ordine sono ID post che non vengono indicizzati per impostazione predefinita. Possiamo dire a SearchWP di indicizzare i numeri d'ordine WooCommerce insieme agli altri dati dell'ordine con uno snippet come questo:

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 );

Nota: Poiché abbiamo aggiunto 'Qualsiasi chiave meta' al motore amministrativo che abbiamo creato, saremo ora in grado di cercare anche per numero d'ordine.

Rendere ricercabili le note d'ordine

Se ricorderai, abbiamo aggiunto 'Commenti' all'Admin Engine sopra. WooCommerce utilizza i Commenti per le Note d'Ordine, ma c'è una restrizione aggiuntiva imposta da WooCommerce a causa della natura privata delle Note d'Ordine. Possiamo rimuovere questa restrizione per SearchWP con uno snippet come questo:

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 );

Una volta aggiunto questo snippet, dovrai ricostruire il tuo indice facendo clic sul pulsante Ricostruisci Indice nella scheda Motori della schermata delle impostazioni di SearchWP, e quando l'indice sarà stato ricostruito, anche le tue Note d'Ordine di WooCommerce saranno ricercabili.

Crea Oggi Stesso una Migliore Esperienza di Ricerca WordPress

Non perdere mai più visitatori a causa di risultati di ricerca inutili. SearchWP rende la creazione della tua ricerca intelligente WordPress veloce e facile.

Get SearchWP Now
Icona di motori di ricerca multipli