【WordPress】検索結果から固定ページを除く

  • 投稿 : 2018-09-29

WordPressの検索フォーム(ウィジェット他)の話です。標準では、記事と固定ページが検索対象に含まれます。そこで、検索対象を記事だけにしたい場合の方法論です。

//---------
//検索で固定記事を除く
//----------
add_filter('posts_search', 'my_posy_search');
function my_posy_search($search) {
  if(is_search()) {
    $search .= " AND post_type = 'post'";
  }
  return $search;
}

テーマのfunctions.phpを追加すればOKです。

補足

posts_search | Hook | WordPress Developer Resources

ソースの「wp-includes/class-wp-query.php」あたりを見て確認してきてください。「apply_filters_ref_array( 'posts_search'」で検索して、その前の部分の処理をみれば、記事の処理が妥当だというのがわかるかと思います。

add_filterでフックしているロジックは、Wordpressのapply_filters(又はapply_filters_ref_array)の該当場所を見れば、うまくいかない理由とかそういうのがわかるかと思います。

バージョンが変わって仕様が変わったのか、それとも動作確認をしてないのか不明だけど、どうも正しくなさそうなものもネットで公開されてるので、自身でわかる範囲で検証したほうがよいと思います。

スポンサーリンク