Buscar contenido de documentos de productos descargables (PDF) de WooCommerce
Si vendes descargas de documentos en tu tienda de WooCommerce, ¡es posible que SearchWP indexe el contenido de esos documentos para que tus clientes puedan buscarlo!
Nota: esto (como todo el procesamiento de documentos en SearchWP) requiere que las Descargas de Productos Descargables de WooCommerce se hayan subido a la biblioteca de medios local de WordPress.
Indexar contenido de documentos de WooCommerce
Podemos aprovechar la capacidad de SearchWP para analizar y hacer que el contenido de documentos legibles almacenados en la biblioteca de medios de WordPress sea buscable. Esto se puede combinar con la potente capacidad de SearchWP para indexar metadatos 'adicionales' en su propio índice, sin afectar los datos almacenados en la tabla post o postmeta de WordPress.
El beneficio de este enfoque será indexar el contenido de la(s) Descarga(s) de WooCommerce sin exponer el activo completo.
Para un ejemplo más generalizado de indexación de datos 'adicionales', consulta este artículo de la base de conocimientos: Añadir datos adicionales a las entradas indexadas
Si deseas hacer que tu contenido descargable de WooCommerce sea buscable, puedes usar este hook:
All hooks should be added to your custom SearchWP Customizations Plugin.
| <?php | |
| // Tell SearchWP to parse WooCommerce Downloadable Product downloads for document content. | |
| // The content will be extracted from downloadable documents where possible and stored | |
| // in SearchWP's index as a Custom Field with a label of "SearchWP WooCommerce Download Content" | |
| add_filter( 'searchwp\entry\data', function( $data, \SearchWP\Entry $entry ) { | |
| if ( 'post.product' !== $entry->get_source()->get_name() || ! class_exists( 'WC_Product' ) ) { | |
| return $data; | |
| } | |
| $product = new \WC_Product( $entry->get_id() ); | |
| $downloads = $product->get_downloads(); | |
| if ( empty( $downloads ) ) { | |
| return $data; | |
| } | |
| // WooCommerce only stores a hashed ID, the filename, and the URL to the file | |
| // but we need to retrieve the Media library ID for each downloadble file. | |
| $download_content = []; | |
| $upload_dir = wp_upload_dir(); | |
| foreach ( $downloads as $key => $download ) { | |
| $relative_file_location = str_replace( trailingslashit( $upload_dir['baseurl'] ), '', $download['data']['file'] ); | |
| // We can use the relative file location to retrieve the post ID we need to parse the PDFs. | |
| $file_id = get_posts( [ | |
| 'post_type' => 'attachment', | |
| 'post_status' => 'inherit', | |
| 'fields' => 'ids', | |
| 'meta_query' => [ [ | |
| 'key' => '_wp_attached_file', | |
| 'value' => $relative_file_location, | |
| ], ], | |
| ] ); | |
| if ( ! empty( $file_id ) ) { | |
| $download_content[] = \SearchWP\Document::get_content( get_post( $file_id[0] ) ); | |
| } | |
| } | |
| $data['meta']['swp_wc_doc_content'] = \SearchWP\Utils::tokenize( $download_content ); | |
| return $data; | |
| }, 20, 2 ); | |
| // Add "SearchWP WooCommerce Download Content" as available option. | |
| add_filter( 'searchwp\source\attribute\options', function( $keys, $args ) { | |
| if ( $args['attribute'] !== 'meta' ) { | |
| return $keys; | |
| } | |
| $content_key = 'swp_wc_doc_content'; | |
| if ( ! in_array( | |
| $content_key, | |
| array_map( function( $option ) { return $option->get_value(); }, $keys ) | |
| ) ) { | |
| $keys[] = new \SearchWP\Option( $content_key, 'SearchWP WooCommerce Download Content' ); | |
| } | |
| return $keys; | |
| }, 20, 2 ); |
Este hook se conectará al proceso de indexación de SearchWP y, cuando encuentre un Producto con Descargas, verificará esas Descargas en busca de contenido de documento y, cuando lo encuentre, indexará ese contenido junto con el Producto.
Esto te permitirá buscar el contenido de la Descarga y que devuelva el Producto, no la Descarga, lo que a su vez permitirá a tu cliente realizar la compra.
El último paso aquí es asegurarte de haber agregado este Campo Personalizado 'adicional' a los Productos en tu Motor de SearchWP, lo cual se puede hacer así:
Nota: Al usar este enfoque, puedes (y probablemente deberías) deshabilitar Medios de tu Motor, ya que el contenido de la Descarga se está agregando al Producto.
Con el contenido del Documento agregado a los Productos en tu Motor, puedes hacer clic en el botón Guardar Motores, reconstruir tu índice y ¡estarás listo!


