WordPress:検索結果をカスタマイズする

WordPress:検索結果をカスタマイズする

WordPressの検索機能は、デフォルトのままでは投稿記事だけでなく固定ページも検索結果に出てきてしまいます。
検索結果に固定ページを出したくない場合や特定の記事を出したくない場合もあると思うので、それらを除外するカスタマイズをメモ兼ねて紹介します。

以下で紹介している方法は、いずれもfunctions.phpを使用します。
テーマ内にfunctions.phpがない場合は作成してください。

WordPress:検索結果をカスタマイズする 目次

  1. 検索結果に投稿記事のみを表示させる
  2. 検索結果から指定した記事やページを除外する

1. 検索結果に投稿記事のみを表示させる

WordPressのデフォルトの検索機能は、投稿記事だけでなく固定ページも検索対象となっており、条件が一致すれば固定ページも検索結果として表示されてしまいます。

例えば、このブログでいう「About」は固定ページで作成しているのですが、投稿記事ではないこれらのページもデフォルトのままでは検索結果として表示されます。
別に表示されてもいいならそのままでいいんですが個人的にはそれが嫌だったので、下記コードをfunctions.phpに記述して固定ページを検索対象から除外しています。

functions.php

add_filter( 'pre_get_posts', 'custom_search_filter' );
function custom_search_filter( $query ) {
  if ( $query->is_search ) {
    $query->set( 'post_type', 'post' );
  }
  return $query;
}

目次へ

2. 検索結果から指定した記事やページを除外する

上記は固定ページを検索結果から除外する方法でしたが、こちらは特定のページを検索対象から除外する方法です。
固定ページだけでなく、投稿記事の中にも検索対象にしたくないものがある場合はこちらを使用するのが良いと思います。

functions.php

add_filter( 'pre_get_posts', 'custom_search_filter' );
function custom_search_filter( $query ) {
  if ( !$query->is_admin && $query->is_search ) {
    $query->set( 'post__not_in', array( 5, 10, 20, 32, 48 ) );
  }
  return $query;
}

上記をfunctions.phpに記述し、指定されたIDのページを検索対象から除外されるようにします。
3行目に記述してある$query->set( 'post__not_in', array( 5, 10, 20, 32, 48 ) );の部分で表示したくないページIDを指定しているので、上記コードで5, 10, 20, 32, 48となっている部分に表示したくないIDを記述していきます。

目次へ

Close the search window,
please press close button or esc key.