WooCommerceダウンロード可能(PDF)製品ドキュメントコンテンツを検索
WooCommerceストアでドキュメントのダウンロードを販売している場合、SearchWPにそれらのドキュメントのコンテンツをインデックスさせて、顧客が検索できるようにすることが可能です!
注意:この機能(SearchWPのすべてのドキュメント処理と同様)は、WooCommerceダウンロード可能製品のダウンロードがローカルのWordPressメディアライブラリにアップロードされている必要があります。
WooCommerceドキュメントコンテンツをインデックス化する
WordPressメディアライブラリに保存されている読み取り可能なドキュメントのコンテンツを解析して検索可能にするSearchWPの機能を利用できます。これは、WordPressの投稿またはpostmetaテーブルに保存されているデータを変更せずに、SearchWPの強力な「追加」メタデータを独自のインデックスにインデックス化する機能と組み合わせることができます。
このアプローチの利点は、アセット全体を公開することなく、WooCommerceダウンロードのコンテンツをインデックス化することです。
「追加」データのインデックス化のより一般的な例については、このKB記事を参照してください:インデックスエントリにデータを追加する
WooCommerceダウンロード可能コンテンツを検索可能にしたい場合は、このフックを使用できます:
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 ); |
このフックはSearchWPのインデックス作成プロセスに接続し、ダウンロードを持つ製品を見つけると、それらのダウンロードのドキュメントコンテンツをチェックし、見つかった場合はそのコンテンツを製品自体と一緒にインデックス化します。
これにより、ダウンロードコンテンツを検索し、ダウンロードではなく製品を返すことができるようになり、顧客は購入を行うことができます。
ここでの最後のステップは、SearchWPエンジンでこれらの「追加」カスタムフィールドを製品に追加したことを確認することです。これは次のように行うことができます:
注意:このアプローチを使用する場合、ダウンロードコンテンツは製品に追加されているため、エンジンからメディアを無効にすることができます(そしておそらく無効にすべきです)。
エンジン内の製品にドキュメントコンテンツを追加したら、[エンジンの保存]ボタンをクリックし、インデックスを再構築すれば完了です!


