SearchWP Documentation

Consulta la guía de instalación, explora la base de conocimiento, descubre los numerosos hooks de SearchWP

Buscar pedidos de WooCommerce

Los pedidos de WooCommerce contienen mucha información y a veces es difícil buscarlos de manera efectiva. SearchWP se puede configurar para buscar pedidos de WooCommerce rápidamente.

Nota: Necesitarás tener activa la extensión Integración con WooCommerce de SearchWP para este proceso.

Paso 1: Hacer que los pedidos de WooCommerce sean buscables

Por defecto, SearchWP no listará los pedidos de WooCommerce como una Fuente porque ese tipo de contenido en particular no es público por diseño. ¡Los pedidos de WooCommerce contienen información sensible y se debe tener especial cuidado al realizar cambios como estos!

Utiliza los siguientes hooks para añadir los pedidos de WooCommerce como una Fuente de 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',
] );
} );
}
} );

Paso 2: Crear un Motor suplementario para búsquedas en el Admin

A continuación, crea un Motor de SearchWP suplementario para usar en las búsquedas del Admin:

Configuración del motor de pedidos de WooCommerce de SearchWP

Nota: Este Motor se usará para todas las búsquedas en el Admin porque esa casilla se marcó durante la configuración. Puedes omitir cualquier Fuente de este Motor y SearchWP omitirá las búsquedas del Admin para esas Fuentes, recurriendo a la configuración predeterminada de WordPress.

Estos son los pasos que se siguieron para crear este Motor de búsqueda para el Admin:

  1. Haz clic en el botón Añadir nuevo en la pestaña Motores de la pantalla de configuración de SearchWP
  2. Haz clic en el botón Fuentes y configuración para el Motor recién creado
  3. Habilita las Fuentes aplicables para este Motor (asegúrate de incluir Pedidos)
  4. Importante: Marca la casilla Motor del Admin
  5. Haz clic en el botón Guardar Motores para guardar el nuevo Motor

Buscar pedidos de WooCommerce

Una vez que el índice haya procesado tus pedidos de WooCommerce existentes, ¡ahora serán buscables en el Admin de WordPress!

Nota: Hay algunos aspectos de los pedidos de WooCommerce que pueden necesitar una integración adicional:

Hacer que los datos de los artículos del pedido sean buscables

Si deseas hacer que los datos de los artículos del pedido (por ejemplo, los números de SKU de los productos para los artículos del pedido) sean buscables, puedes personalizar los datos indexados para cada pedido para incluir cualquier dato de artículo del pedido que desees. En este fragmento, haremos que el SKU, el Nombre del producto, el Slug del producto, la Descripción del producto, la Descripción corta del producto y los Atributos del producto sean buscables para devolver cualquier pedido que coincida:

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: Debido a que añadimos 'Cualquier clave de metadatos' al Motor del Admin que creamos, ahora podremos buscar también por datos de artículos del pedido.

Integrar con filtros de pedidos

Por defecto, SearchWP no se integra con ningún filtro del Admin que se haya configurado. Podemos añadir soporte para los filtros de fecha de pedido y cliente de WooCommerce con este 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 ese hook implementado, SearchWP aplicará los límites definidos por los filtros de fecha de pedido y cliente al buscar pedidos de WooCommerce.

Hacer que los números de pedido sean buscables

Los números de pedido son IDs de publicación que no se indexan por defecto. Podemos indicar a SearchWP que indexe los números de pedido de WooCommerce junto con los demás datos del pedido con un fragmento como este:

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: Debido a que añadimos 'Cualquier clave de metadatos' al Motor del Admin que creamos, ahora podremos buscar también por número de pedido.

Hacer que las notas de pedido sean buscables

Si recuerdas, agregamos 'Comentarios' al Admin Engine de arriba. WooCommerce usa Comentarios para las Notas del pedido, pero hay una restricción adicional impuesta por WooCommerce debido a la naturaleza privada de las Notas del pedido. Podemos eliminar esta restricción para SearchWP con un fragmento como este:

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 vez que se haya agregado este fragmento, deberá reconstruir su índice haciendo clic en el botón Reconstruir índice en la pestaña Motores de la pantalla de configuración de SearchWP, y cuando el índice se haya reconstruido, sus Notas del pedido de WooCommerce también se podrán buscar.

Cree hoy mismo una mejor experiencia de búsqueda en WordPress

No vuelva a perder visitantes por resultados de búsqueda inútiles. SearchWP facilita la creación de su propia búsqueda inteligente en WordPress.

Get SearchWP Now
Icono de múltiples motores de búsqueda