WordPress 検索機能をカスタマイズし、結果に固定ページ・特定のカテゴリのみを検索対象とする

Pocket

【この記事を読むのに必要な時間は約 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 を配列で指定します。いずれのカテゴリにも含まれないとき、結果に表示します。

コメントを残す

メールアドレスが公開されることはありません。