ドキュメントコンテンツを親投稿コンテンツに追加
インデックスされたエントリに余分なデータを追加するの記事の拡張です。
SearchWPは、さまざまな方向に、関連性の重みを転送する機能を持っています。1つの方向は、特にメディアに適用可能であり、SearchWPがメディアエントリの重みをそれぞれの「アップロード先」の投稿に転送することができます。データベースでは、この関係はpost_parent列を使用して確立されます。
この重み転送がエンジン設定でセットアップされている場合(そしてPDFを例にとると)、PDFに含まれるコンテンツを検索すると、SearchWPが返す結果はPDF自体ではなく、それに添付されている投稿になります。
サイトや状況によっては、これは非常に有益です!
ただし、いくつかのエッジケースがあり、常に重み転送を行いたくない場合があります。SearchWPの適応性を活用し、実装をカスタマイズして、代わりに次のことができます。
- SearchWPエンジンからメディアを完全に無効にする
- SearchWPのインデクサーにフックして、インデックス作成時に「子」PDFを取得する
この動的な適用により、投稿ごとに状況をより良く評価できます。
All hooks should be added to your custom SearchWP Customizations Plugin.
| <?php | |
| // @link https://searchwp.com/documentation/knowledge-base/append-document-content-to-parent-post-content/ | |
| // Retrieve child PDF content and add as 'extra' data to a SearchWP Entry. | |
| add_filter( 'searchwp\entry\data', function( $data, \SearchWP\Entry $entry ) { | |
| // Convert the SearchWP Entry into it's native object type. | |
| $entry = $entry->native(); | |
| // We only want to consider WP_Post objects. | |
| if ( ! $entry instanceof \WP_Post ) { | |
| return $data; | |
| } | |
| // Retrieve PDFs that have been uploaded to this Entry. | |
| $pdfs = get_posts( [ | |
| 'post_type' => 'attachment', | |
| 'post_mime_type' => 'application/pdf', | |
| 'post_status' => 'inherit', | |
| 'nopaging' => true, | |
| 'post_parent' => $entry->ID, | |
| ] ); | |
| if ( empty( $pdfs ) ) { | |
| return $data; | |
| } | |
| // Retrieve PDF content for PDFs and store as extra data. | |
| $data['meta'][ 'searchwp_child_pdf_content' ] = array_map( function( $pdf ) { | |
| return \SearchWP\Document::get_content( $pdf ); | |
| }, $pdfs ); | |
| return $data; | |
| }, 20, 2 ); | |
| // Add "Attached PDF Content" as available option to SearchWP Source Attributes. | |
| add_filter( 'searchwp\source\attribute\options', function( $keys, $args ) { | |
| if ( $args['attribute'] !== 'meta' ) { | |
| return $keys; | |
| } | |
| // This key is the same as the one used in the searchwp\entry\data hook above, they must be the same. | |
| $pdf_content_key = 'searchwp_child_pdf_content'; | |
| // Add "Attached PDF Content" Option if it does not exist already. | |
| if ( ! in_array( | |
| $pdf_content_key, | |
| array_map( function( $option ) { return $option->get_value(); }, $keys ) | |
| ) ) { | |
| $keys[] = new \SearchWP\Option( $pdf_content_key, 'Attached PDF Content' ); | |
| } | |
| return $keys; | |
| }, 20, 2 ); |
これらのフックはSearchWPのインデックス作成プロセスに接続され、各投稿(例:投稿、ページ、カスタム投稿タイプ)に対して、「アップロード先」の現在の投稿にあるPDFを探し(確立されたpost_parent関係を利用して)、各PDFの内容を解析します。
すべての「子」PDFの内容は、searchwp_child_pdf_contentという名前の追加のカスタムフィールドとして保存されます。2番目のフックは、この追加のカスタムフィールドをSearchWPエンジンの投稿属性を管理する際のカスタムフィールドドロップダウンに追加し、エントリ名は添付PDFコンテンツとなり、抽出されたPDFコンテンツに個別の関連性重みを与えることができます。
注意:この変更を有効にするには、SearchWP設定画面のエンジンのタブにあるボタンを使用してインデックスを再構築する必要があります。

