【WordPress】検索結果から固定ページを除外する方法|投稿の記事みを検索

WordPressで作製したサイトでサイト内検索をした際に、検索結果から固定ページの記事を除外し、投稿ページの記事のみを表示したい場合があるかもしれません。

今回は、そのような場合に使用できるソースコード例となります。

検索結果から固定ページの記事を除外する方法

以下は、フィルターフックposts_searchを使い、サイト内検索の検索結果から固定ページの記事を除外する例となります。

ソースコードは、functions.phpファイルに記述します。

function my_posts_search( $search, $wp_query ){
	// 検索結果ページ・メインクエリ・管理画面以外の条件が揃った場合
    if ( $wp_query->is_search() && $wp_query->is_main_query() && !is_admin() ){
		// 検索結果を投稿ページのみとする
    	$search .= " AND post_type = 'post' ";
    	return $search;
    }
	// 上記条件分岐以外は、検索結果を変更しない
	return $search;
}
add_filter('posts_search','my_posts_search', 10, 2);

ソースコードの説明

以下、ソースコードの説明となります。

フィルターフックposts_search

フィルターフックposts_searchは、WP_Queryの検索結果をカスタマイズできるフックとなり、フックに登録した関数の引数には、それぞれ以下の値が格納されています。

  • 第1引数には、SQLのWHERE句の検索条件が格納
  • 第2引数には、現在のWP_Queryオブジェクトが格納

検索結果を変更する箇所を限定する

フィルターフックposts_searchで、WP_Queryの検索結果を変更すると、管理画面やサブループなどで利用しているクエリも変更されます。

そのため、例の3行目の条件分岐で検索結果を変更する箇所を、「検索結果ページ」「メインクエリ」「管理画面以外」の条件が揃った場合のみとして限定しています。

WHERE句のAND演算子で条件を追加し検索結果を変更

そして、例の5行目の箇所で、WHERE句の検索条件にAND演算子を使い、条件として「投稿」を追加しています。

それにより、サイト内検索をした際、検索結果に投稿ページの記事みを表示しています。

参考サイトなど

コメント投稿またはTwitterで返信

コメントは、以下の項目(*は必須項目)を入力し「コメントを送信」ボタンから送信お願いします。メールアドレスは公開されることはありません。
Twitterで返信する場合はこちらから。

また、コメントは承認制となります。