【完全版】WordPressで特定のページを検索結果から除外する方法

【完全版】WordPressで特定のページを検索結果から除外する方法

フィルターフックで検索結果から固定ページの記事を除外

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" />

 

ユーザーコメント

0

0

398