Rechercher dans le contenu des documents produits téléchargeables (PDF) WooCommerce
Si vous vendez des documents téléchargeables dans votre boutique WooCommerce, il est possible que SearchWP indexe le contenu de ces documents pour les rendre consultables par vos clients !
Remarque : ceci (comme tout traitement de document dans SearchWP) nécessite que les téléchargements de produits téléchargeables WooCommerce aient été téléchargés dans la bibliothèque de médias WordPress locale.
Indexer le contenu des documents WooCommerce
Nous pouvons tirer parti de la capacité de SearchWP à analyser et à rendre consultable le contenu des documents lisibles stockés dans la bibliothèque de médias WordPress. Cela peut être associé à la puissante capacité de SearchWP à indexer des métadonnées « supplémentaires » dans son propre index, sans affecter les données stockées dans la table post ou postmeta de WordPress.
L'avantage de cette approche sera d'indexer le contenu du ou des téléchargements WooCommerce sans exposer l'intégralité de l'actif.
Pour un exemple plus général d'indexation de données « supplémentaires », consultez cet article de la base de connaissances : Ajouter des données supplémentaires aux entrées indexées
Si vous souhaitez rendre consultable votre contenu téléchargeable WooCommerce, vous pouvez utiliser ce 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 ); |
Ce hook s'intégrera au processus d'indexation de SearchWP et lorsqu'il trouvera un produit avec des téléchargements, il vérifiera ces téléchargements pour le contenu du document et, lorsqu'il le trouvera, indexera ce contenu aux côtés du produit lui-même.
Cela vous permettra de rechercher le contenu du téléchargement et d'obtenir le produit, et non le téléchargement, ce qui permettra à votre client d'effectuer l'achat.
La dernière étape consiste à vous assurer que vous avez ajouté ce champ personnalisé « supplémentaire » aux produits de votre moteur SearchWP, ce qui peut être fait comme suit :
Remarque : Lorsque vous utilisez cette approche, vous pouvez (et devriez probablement) désactiver les médias de votre moteur, car le contenu du document est ajouté au produit.
Avec le contenu du document ajouté aux produits de votre moteur, vous pouvez cliquer sur le bouton Enregistrer les moteurs, reconstruire votre index, et vous serez prêt !


