【この記事を読むのに必要な時間は約 4 分です】
WordPress の標準の検索機能では、存在する記事、固定ページすべてを検索対象としています。記事のみを検索対象として固定ページを検索結果から除外する、また、特定のカテゴリのみを検索対象に含む/除外するサンプルコードをご紹介します。
固定ページを検索対象外にする
固定ページを検索結果から除外するには、下記コードを functions.php に記述してください。
post_type に ‘post’ を指定することで、検索対象を投稿した記事のみに限定することができます。 post_type の指定箇所を書き換えることで検索対象を変更できます。カスタム投稿タイプの場合はカスタム投稿の名称を指定します。
/* ------------------------------------------------------- */ /* 固定ページを検索対象外にする /* ------------------------------------------------------- */ function SearchFilter($query) { if ( !is_admin() && $query->is_main_query() && $query->is_search() ) { $query->set('post_type', 'post'); } return $query; } add_filter('pre_get_posts','SearchFilter');
また、 post_type には複数のタイプを指定することもできます。記事と固定ページのみを検索対象とする場合は、以下のように書き換えてください。
$query->set('post_type', array('post', 'page'));
特定のカテゴリのみを検索対象にする
特定のカテゴリのみを検索対象にするには、下記コードを functions.php に記述してください。’category_in’ は「指定したカテゴリいずれかに含む」という意味の検索条件です。逆に、「指定のカテゴリに含まれない」という検索条件とすることもできます。
/* ------------------------------------------------------- */ /* 特定のカテゴリのみを検索対象にする /* ------------------------------------------------------- */ function SearchFilter($query) { if ( !is_admin() && $query->is_main_query() && $query->is_search() ) { $query->set('category__in', array(1,2)); //カテゴリIDを指定 } return $query; } add_filter('pre_get_posts','SearchFilter');
- category_in :検索対象に含むカテゴリー ID を配列で指定します いずれかのカテゴリに含まれているとき、結果に表示します。
- category_not_in :検索対象から除外するカテゴリー ID を配列で指定します。いずれのカテゴリにも含まれないとき、結果に表示します。