【WordPress】検索結果から固定ページを除外する方法|投稿の記事みを検索
WordPressでサイト内検索をした際に、検索結果から固定ページを除外し、投稿ページのみを表示したい場合があるかもしれません。
今回は、そのような場合に利用できる2種類のカスタマイズの例となります。
フィルターフックで検索結果から固定ページの記事を除外
WordPressではページを表示する際に、データベースに対してSQLクエリを発行しデータを取得しますが、ページに表示する情報をカスタマイズしたい場合に、クエリを修正するカスタムクエリを利用する方法があります。
以下のソースコードは、そのカスタムクエリを利用する方法となりfunctions.phpに記述します。
例では、フィルターフックposts_searchを使い、サイト内検索の検索結果から固定ページの記事を除外しています。
function my_posts_search( $search, $wp_query ){
// クエリを修正する条件
if ( $wp_query->is_main_query() && is_search() && !is_admin() ){
// 検索結果に対して投稿ページのみとする条件を追加
$search .= " AND post_type = 'post' ";
}
return $search;
}
add_filter('posts_search','my_posts_search', 99, 2);
以下、フィルターフックposts_searchのソースコードの説明となります。
フィルターフックposts_searchについて
フィルターフックposts_searchは、WP_QueryのSQLクエリのWHERE句を変更できるフックとなり、そのWHERE句を修正することでクエリを変更できます。
フックに登録した関数の引数には、それぞれ以下の値が渡されます。
- 第1引数には、クエリのWHERE句
- 第2引数には、WP_Queryオブジェクト
検索結果のクエリを変更する箇所を限定する
フィルターフックposts_searchでクエリを修正すると、サブループや管理画面などのクエリも変更されます。
そのため、例では条件分岐でクエリを修正する箇所を「現在のメインクエリ」「検索結果ページ」「管理画面以外」の条件が揃った場合のみとしています。
WHERE句のAND演算子で条件を追加し検索結果のクエリを変更
上記の条件分岐内では、WHERE句の検索条件にAND演算子を使い「投稿」を追加しています。
それにより、サイト内検索をした際、検索結果に投稿ページの記事みを表示しています。
input要素で検索結果から固定ページの記事を除外
上記フィルターフックを利用する方法以外に、サイト内検索フォームのform要素内に、以下の非表示のinput要素を追加することでも、検索結果から固定ページの記事を除外できます。
<input type="hidden" value="post" name="post_type" id="post_type" />