問題
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() | 検索ページが表示されているかどうかを判定(TRUEかFALSEを返します) |
---|---|
is_main_query() | メインクエリーかどうかを判定(TRUEかFALSEを返します) |
is_admin() | ダッシュボードまたは管理画面の表示中かどうかを判定(TRUEかFALSEを返します) |
「$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/
【プラグイン API/アクションフック一覧/pre get posts – WordPress Codex 日本語版】
https://wpdocs.osdn.jp/%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3_API/%E3%82%A2%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%95%E3%83%83%E3%82%AF%E4%B8%80%E8%A6%A7/pre_get_posts
コメント