WooCommerce-Bestellungen durchsuchen
WooCommerce-Bestellungen enthalten viele Informationen und sind manchmal schwierig effektiv zu durchsuchen. SearchWP kann so eingerichtet werden, dass WooCommerce-Bestellungen schnell durchsucht werden.
Hinweis: Sie benötigen die aktive WooCommerce-Integration-Erweiterung von SearchWP für diesen Vorgang.
Schritt 1: WooCommerce-Bestellungen durchsuchbar machen
Standardmäßig listet SearchWP WooCommerce-Bestellungen nicht als Quelle auf, da dieser spezielle Inhaltstyp per Design nicht public ist. WooCommerce-Bestellungen enthalten sensible Informationen und es muss zusätzliche Sorgfalt walten, wenn solche Änderungen vorgenommen werden!
Verwenden Sie die folgenden Hooks, um WooCommerce-Bestellungen als SearchWP-Quelle hinzuzufügen:
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', | |
| ] ); | |
| } ); | |
| } | |
| } ); |
Schritt 2: Eine ergänzende Engine für Admin-Suchen erstellen
Erstellen Sie als Nächstes eine ergänzende SearchWP-Engine, die für Admin-Suchen verwendet werden soll:
Hinweis: Diese Engine wird für alle Suchen im Admin verwendet, da dieses Kontrollkästchen während der Einrichtung aktiviert wurde. Sie können beliebige Quellen von dieser Engine ausschließen, und SearchWP wird Admin-Suchen für diese Quellen überspringen und auf die Standardeinstellung von WordPress zurückgreifen.
Hier sind die Schritte, die zur Erstellung dieser Admin-Such-Engine unternommen wurden:
- Klicken Sie auf die Schaltfläche Neu hinzufügen auf der Registerkarte Engines der SearchWP-Einstellungsoberfläche
- Klicken Sie auf die Schaltfläche Quellen & Einstellungen für die neu erstellte Engine
- Aktivieren Sie die zutreffenden Quellen für diese Engine (stellen Sie sicher, dass Bestellungen enthalten sind)
- Wichtig: Aktivieren Sie das Kontrollkästchen Admin Engine
- Klicken Sie auf die Schaltfläche Engines speichern, um die neue Engine zu speichern
WooCommerce-Bestellungen durchsuchen
Sobald der Index Ihre vorhandenen WooCommerce-Bestellungen verarbeitet hat, sind diese nun im WordPress-Admin durchsuchbar!
Hinweis: Es gibt einige Aspekte von WooCommerce-Bestellungen, die möglicherweise eine weitere Integration erfordern:
Bestellposten-Daten durchsuchbar machen
Wenn Sie Bestellposten-Daten (z. B. Produkt-SKU-Nummern für Bestellposten) durchsuchbar machen möchten, können Sie die indizierten Daten für jede Bestellung anpassen, um alle gewünschten Bestellposten-Daten einzuschließen. In diesem Snippet machen wir die SKU, den Produktnamen, den Produktschlagwort, die Produktbeschreibung, die Kurzbeschreibung des Produkts und die Produktattribute durchsuchbar, um übereinstimmende Bestellungen zurückzugeben:
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 ); |
Hinweis: Da wir 'Beliebige Meta-Schlüssel' zu der von uns erstellten Admin-Engine hinzugefügt haben, können wir jetzt auch nach Bestellposten-Daten suchen.
Integration mit Bestellfiltern
Standardmäßig integriert sich SearchWP nicht mit Admin-Filtern, die eingerichtet wurden. Wir können mit diesem Hook Unterstützung für die Bestell-Datums- und Kundenfilter von WooCommerce aufbauen:
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 ); |
Mit diesem Hook werden die von den Bestell-Datums- und Kundenfiltern definierten Limits beim Durchsuchen von WooCommerce-Bestellungen angewendet.
Bestellnummern durchsuchbar machen
Bestellnummern sind Post-IDs, die standardmäßig nicht indiziert werden. Wir können SearchWP anweisen, WooCommerce-Bestellnummern neben den anderen Bestelldaten mit einem Snippet wie diesem zu indizieren:
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 ); |
Hinweis: Da wir 'Beliebige Meta-Schlüssel' zu der von uns erstellten Admin-Engine hinzugefügt haben, können wir jetzt auch nach Bestellnummern suchen.
Bestellnotizen durchsuchbar machen
Wenn Sie sich erinnern, haben wir oben 'Kommentare' zur Admin Engine hinzugefügt. WooCommerce verwendet Kommentare für Bestellnotizen, aber WooCommerce schränkt diese aufgrund des privaten Charakters von Bestellnotizen zusätzlich ein. Wir können diese Einschränkung für SearchWP mit einem Snippet wie diesem entfernen:
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 ); |
Sobald dieses Snippet hinzugefügt wurde, müssen Sie Ihren Index neu erstellen, indem Sie auf die Schaltfläche Index neu erstellen auf der Registerkarte Engines der SearchWP-Einstellungen klicken. Wenn der Index neu erstellt wurde, sind auch Ihre WooCommerce-Bestellnotizen durchsuchbar.


