管理画面で固定ページを検索すると投稿が表示されてしまう
目次
今回の事象
WordPressサイトで検索ページを作成しました。
無事に実装はできたのですが、何故か管理画面の「固定ページ」⇒キーワードを入力して「検索」しても固定ページがヒットしません。
キーワードに引っかかった投稿の記事がずらずらと表示されました。
原因
検索結果の対象について、functions.phpに以下の記述をしていました。
function SearchFilter($query)
{
if ($query->is_search) {
$query->set('post_type', 'news');
}
return $query;
}
add_filter('pre_get_posts', 'SearchFilter');
カスタム投稿タイプが「news」のものを検索して表示する、という記述です。フロントの方はうまく検索表示されていました。
ですが、これでは管理画面のほうにもこの検索条件が反映してしまいます。
「pre_get_posts」フックは影響範囲が広く、メインクエリー以外にも影響を及ぼしてしまうようです。
解決方法
というわけなので以下のように記述を変更。
// 検索ページの表示対象をカスタム投稿(NEWS)に限定する
function SearchFilter($query) {
if ( !is_admin() && $query->is_main_query() && $query->is_search() ) {
$query->set( 'post_type', 'news' );
}
}
add_action( 'pre_get_posts','SearchFilter' );
この検索結果を適用するのは管理画面ではなく、且つメインクエリーの時に、この検索条件が反映されるようにしました。
こうすることで管理画面の固定ページ検索が通常通りに動くようになりました。