検索結果に投稿タイプラベルを表示する方法
デフォルトのWordPress検索を使用する場合、結果はテーマに組み込まれた検索テンプレートファイル(通常はsearch.phpという名前)を通じて表示されます。ほとんどのWordPressテーマでは、デフォルトで検索結果表示に投稿タイプ情報が含まれておらず、投稿タイトル、抜粋、その他の標準的な要素のみが表示されます。各検索結果の横に投稿タイプラベル(例:「投稿」、「ページ」、「商品」など)を表示したい場合は、テーマの検索テンプレートを編集するか、WordPressフックを使用することで、簡単なカスタマイズが必要になります。
最初の方法は、テーマの検索テンプレートファイルを直接編集することです。メインの検索ループ内で、get_post_type_object() 関数を使用して、各結果の投稿タイプラベルを取得して表示できます。これにより、検索結果のレイアウト内で投稿タイプ情報がどこにどのように表示されるかを完全に制御できます。または、WordPressのフィルターフックを使用して、各検索結果のタイトルの前に投稿タイプラベルを自動的に追加することもできます。この方法はより簡単で、テーマファイルを変更する必要はありません。SearchWPカスタマイズプラグインを用意するか、WPCodeのようなコードスニペットマネージャーを使用して、次のスニペットを追加できます。
| <?php | |
| // Prepend post type label to title for native main search | |
| add_filter( 'the_title', function( $title, $post_id ) { | |
| if ( in_the_loop() && ( is_search() || isset( $_REQUEST['swps'] ) ) ) { | |
| $post_type_obj = get_post_type_object( get_post_type( $post_id ) ); | |
| if ( $post_type_obj && ! empty( $post_type_obj->labels->singular_name ) ) { | |
| $label = esc_html( $post_type_obj->labels->singular_name ); | |
| $title = sprintf( '<span class="search-post-type">%s:</span> %s', $label, $title ); | |
| } | |
| } | |
| return $title; | |
| }, 10, 2 ); |
このコードは、ユーザーが検索を実行するたびに、投稿タイプ名(「ページ」や「商品」など)が検索結果リストの各結果のタイトルの前に表示されることを保証します。WordPressのthe_title() フィルターを使用し、現在のループが検索クエリの一部であるかどうかを確認してから変更を適用します。
SearchWPのカスタムテンプレート結果またはライブ検索を使用している場合、これらの結果は異なる方法で生成されるため、上記のフックは自動的に適用されません。代わりに、SearchWP独自のフィルターフックを使用して、各結果エントリの出力を変更できます。次の例は、SearchWPテンプレートとライブ検索結果の両方で、タイトルの前に投稿タイプラベルを追加する方法を示しています。
フォールバック画像を使用した例を次に示します。
| <?php | |
| // Display post type label before title for SearchWP template and live search results | |
| function prepend_post_type_to_title( $data, $result ) { | |
| if ( $result instanceof \WP_Post ) { | |
| $post_type_obj = get_post_type_object( get_post_type( $result ) ); | |
| if ( $post_type_obj && ! empty( $post_type_obj->labels->singular_name ) ) { | |
| $label = esc_html( $post_type_obj->labels->singular_name ); | |
| $data['title'] = $label . ' - ' . $data['title']; | |
| } | |
| } | |
| return $data; | |
| } | |
| // Hook for SearchWP template | |
| add_filter( 'searchwp\results\entry\data', function( $data, $result ) { | |
| return prepend_post_type_to_title( $data, $result ); | |
| }, 20, 2 ); | |
| // Hook for SearchWP Live Search | |
| add_filter( 'searchwp_live_search_results_entry_data', function( $data, $result ) { | |
| return prepend_post_type_to_title( $data, $result ); | |
| }, 20, 2 ); |
このカスタマイズにより、SearchWPはカスタム検索テンプレートの結果とライブ検索ドロップダウンの両方で、タイトルの前に投稿タイプ名を自動的に表示します。この方法は、テーマファイルを直接変更することなく、ユーザーが表示しているコンテンツのタイプに関する追加のコンテキストを検索結果に提供するための、柔軟でコードフレンドリーな方法を提供します。

