wordpressのブログ内検索をカスタマイズ!投稿のみの検索や固定ページのみの検索にしてみました

スポンサーリンク

今回、わけあってWordpressに標準で付いている「検索」をカスタマイズしてみました。

WordPress標準の検索機能とは

ウィジットとかに置いておくこちらの検索ボックス。

普通は「投稿(記事)」「ページ(固定ページ)」から検索ができます。

ブログ全体から検索するのであれば問題ないのですが、

今回は「固定ページ」のみを検索する設定をしてみました。

WordPressの検索をカスタマイズするプラグイン

グーグル先生にお尋ねしたところ、以下のプラグインがあるそうなので試してみました。

  • WP Custom Fields Search

機能的には素晴らしいのですが、ソフトウェアの更新が数ヶ月前から止まっているようです。僕のWordpress 4.4.2では、Worningが発生してしまったため、使用を断念しました。

  • Search Everything

タイトルや本文のほか、コメントやタグなどを検索対象としたり、特定のカテゴリや記事、ページを除外する設定ができる素晴らしいプラグインです。

ただ、投稿全部を除外とか、固定ページのみとかの設定がなかったのが残念。除外カテゴリで全部のカテゴリを指定するのもありですが、カテゴリが増えた時(すぐ増えるので)に登録を忘れそうなのでこちらも使用をあきらめました。

自前でカスタマイズしてみる

ふたたび、グーグル先生にお尋ねしたところ、検索に関わる関数を修正することで出来るとのこと。

さっそくやってみました。

こちらのサイト様がとてもわかりやすかったです(というか、まるパクリ)。

ありがとうございます!!

【WordPressの「検索結果を投稿だけ」表示させる】「pre_get_posts」を使ってCodexのコードをこう書くと問題を回避できます|今村だけがよくわかるブログ
WordPressにはウィジェットとして、下のような検索フォームが追加できるようになってるじゃないですか。 設置したら、こんな感じで表示されます。(Twenty Twelveテーマを使った場合) それで、便利なんですけど...

 

やり方は、wordpressのテーマ内にある「functions.php」に関数を追記するだけです。

ただし、親テーマの「functions.php」に記載してしまうと、テーマがバージョンアップした時にこのファイルが上書きされる可能性があります。

なので、子テーマを用意して、そこの「functions.php」に記載しましょう。

function SearchFilter($query) {
 if ( !is_admin() && $query->is_main_query() && $query->is_search() ) {
  $query->set( 'post_type', 'page' );
 }
}

add_action( 'pre_get_posts','SearchFilter' );

これだけで、wordpressの検索結果が「固定ページ」だけになります。

なお、

$query->set( 'post_type', 'page' );

の「page」を「post」にすると、投稿だけを検索するようになります。

以上で、固定ページに「黒ウィズクイズ」の答えを書くことで、検索機能を実装することが出来ました!

 

コメント