問題 × 解決策

WordPressのサイト内検索でカスタム投稿を含める方法

問題

Wordpressのサイト内検索でカスタム投稿を含めるには?

解決策

functions.phpにて「pre_get_posts」をフックし、「$query->set( 'post_type', array( 'post', 'page', '投稿タイプ名' ) );」でカスタム投稿を指定する。

 

カスタム投稿もサイト内検索に含める。

WordPressのサイト内検索でカスタム投稿を含める方法をご紹介します。

「pre_get_posts」をフックする。

「pre_get_posts」フックは、クエリ変数オブジェクトの生成後、実際にクエリが実行される前に呼び出されます。
なのでこのフックを使い、クエリにカスタム投稿を含める記述をfunctions.phpに行います。

functions.php

function filter_search( $query ) {
  // 上書きする内容
}
add_filter( 'pre_get_posts', 'filter_search' );
  • 「add_filter( ‘pre_get_posts’, ‘関数名’ );」を設定することで、「pre_get_posts」の実行時に、設定した関数を呼び出すことができます。
  • 「$query」を引数に設定することで、クエリ($query)に干渉することができます。

「$query->set( ‘post_type’, array( ‘post’, ‘page’, ‘投稿タイプ名’ ) );」でクエリ内の対象の投稿タイプをカスタマイズする。

「$query->set( ‘post_type’, array( ‘post’, ‘page’, ‘投稿タイプ名’ ) );」と実行することで、クエリ内の対象の投稿タイプをカスタマイズすることができます。
もし投稿や固定ページを除外したい場合は。上記の「post」「page」を削除し、「$query->set( ‘post_type’, array( ‘投稿タイプ名’ ) );」とすることで、検索から除外することができます。

$query->set( 'post_type', array( 'post', 'page', 'customposttype' ) );

「if ( $query->is_search() && $query->is_main_query() && ! is_admin() )」でサイト内検索結果ページのみを対象にする。

「if ( $query->is_search() && $query->is_main_query() && ! is_admin() )」という条件分岐を挟むことで、サイト内検索結果ページのみを対象にします。

if ( $query->is_search() && $query->is_main_query() && ! is_admin() )
is_search() 検索ページが表示されているかどうかを判定(TRUEFALSEを返します)
is_main_query() メインクエリーかどうかを判定(TRUEFALSEを返します)
is_admin() ダッシュボードまたは管理画面の表示中かどうかを判定(TRUEFALSEを返します)

「$query->set( ‘post_type’, array( ‘post’, ‘page’, ‘投稿タイプ名’ ) );」でクエリ内の対象の投稿タイプをカスタマイズする。

「$query->set( ‘post_type’, array( ‘post’, ‘page’, ‘投稿タイプ名’ ) );」と実行することで、クエリ内の対象の投稿タイプをカスタマイズすることができます。
もし投稿や固定ページを除外したい場合は。上記の「post」「page」を削除し、「$query->set( ‘post_type’, array( ‘投稿タイプ名’ ) );」とすることで、検索から除外することができます。

function filter_search( $query ) {
  // 上書きする内容
  $query->set( 'post_type', array( 'post', 'page', 'customposttype' ) );
}
add_filter( 'pre_get_posts', 'filter_search' );

記述例

上記を元にした記述例は以下になります。

functions.php

function filter_search( $query ) {
  if ( $query->is_search() && $query->is_main_query() && ! is_admin() ) {
    $query->set( 'post_type', array( 'faq', 'library' ) );
  }
}
add_filter( 'pre_get_posts', 'filter_search' );

参照

以下のサイトが、より詳しく解説してくれています。

【WordPressの検索結果にカスタム投稿タイプの記事も含める方法 | TechMemo】
https://techmemo.biz/wordpress/filter-search/

コメント

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

3 × 1 =

「問題 × 解決策」
月別アーカイブ一覧

「問題 × 解決策」
月別アーカイブ一覧