WordPressの検索機能では基本、投稿・固定ページの全てのページが検索対象になっています。
今回は特定のページを除外したり、検索対象に含まれていないカスタム投稿を検索結果に追加する方法をまとめてみました。
検索結果に固定ページを含まない(投稿ページのみ)方法
ブログやメディアサイトなどで固定ページを含めたくない場合には以下のコードをfunction.phpに追記してください。
function wp_search_filter_not_page( $query ) {
if ( $query->is_search && !is_admin() ){
$query->set( 'post_type', 'post');
}
return $query;
}
add_action( 'pre_get_posts', 'wp_search_filter_not_page' );
検索結果にカスタム投稿タイプの記事も含める方法
先ほど記載した通り、投稿・固定ページの全てのページが検索対象になっていますが、カスタム投稿の場合は検索対象に含まれません。
検索結果にカスタム投稿タイプの記事も含めたい場合には以下のコードをfunction.phpに追記してください。
カスタム投稿名を「 sample 」とします。
function filter_search_and( $query ) {
if ( $query->is_search() && $query->is_main_query() && ! is_admin() ) {
$query->set( 'post_type', array( 'post', 'page', 'sample' ) );
}
}
add_filter( 'pre_get_posts', 'filter_search_and' );
カスタム投稿のみ検索結果する方法
先ほど記載した方法ですと、投稿・固定・カスタム投稿が検索対象になりますが、カスタム投稿のみ検索対象としたい場合は以下のコードをfunction.phpに追記してください。
カスタム投稿名を「 sample 」とします。
function filter_search_custom_post( $query ) {
if ( $query->is_search() && $query->is_main_query() && ! is_admin() ) {
$query->set( 'post_type', array( 'sample' ) );
}
}
add_filter( 'pre_get_posts', 'filter_search_custom_post' );
検索結果から特定のページを除外する方法
サイトマップやお問い合わせのサンクスページなど検索結果に出したくないページなどがある場合は以下のコードをfunction.phpに追記してください。
array( 1,2,3 )の数字部分に投稿IDを入れてください。
function wp_search_filter_not_post( $query ) {
if ( $query->is_search && !is_admin() ){
$query->set( 'post__not_in', array( 1,2,3 ) );
}
return $query;
}
add_action( 'pre_get_posts', 'wp_search_filter_not_post' );
検索結果から特定のカテゴリを除外する方法
特定のカテゴリーを検索結果から除外したい場合は以下のコードをfunction.phpに追記してください。
$query->set( ‘cat’,’-1, -2, -3′ )の数字部分にカテゴリーIDを入れてください。
function wp_search_not_category( $query ) {
if ( $query->is_search && !is_admin() ){
$query->set( 'cat','-1, -2, -3' );
}
return $query;
}
add_filter( 'pre_get_posts', 'wp_search_not_category' );
検索結果から特定のタグを除外する方法
特定のタグを検索結果から除外したい場合は以下のコードをfunction.phpに追記してください。
$query->set( ‘tag’,’-1, -2, -3′ )の数字部分にタグIDを入れてください。
function wp_search_not_tag( $query ) {
if ( $query->is_search && !is_admin() ){
$query->set( 'tag','-1, -2, -3' );
}
return $query;
}
add_filter( 'pre_get_posts', 'wp_search_not_tag' );