はじめに
WordPressの検索は本来AND検索になっている。
でも、案件によってOR検索にしたいなと思ってやり方を調べてみた。
posts_searchフィルタを使用する
ただ、あんまり情報がない。WordPress本体にあるquery.php(wp-includes内にあるやつ)を弄るって書いてあるやつが結構あるけど、アップデートされたら元に戻っちゃう。
そこで参考にしたのが下記記事。
[WordPress] 検索を OR 検索 にする | unlinked log
[php]add_filter(‘posts_search’, function($search) { return str_replace(‘)) AND ((‘, ‘)) OR ((‘, $search); });[/php]
このソースコードをfunctions.php内に入れればOK。
posts_searchフィルタを使っても変更できない場合がある。
よし!これでイケルはず!と思ったけど、動かなかった。
意味わかんね。って思って再度調べたらフォーラムにも同じような記事があった。
フォーラムの記事を読む限り上手くいってない人もいるようだけど、対応策は書いてなかった。
原因はプラグイン
先ほどのフォーラム記事はわからないけど、僕の案件で変更されなかったのはプラグインが原因だった。
WordPressの検索範囲は「タイトル」や「本文」など限定されている。なので、カスタムフィールドは対応されていない。
そこで「Search Everything」プラグインを使うと検索範囲を拡張できる。
ここが落とし穴だった。「Search Everything」プラグインはWordPressがどうであれ、プラグイン内で強制的にAND検索に切り替えていた。つまりWordPressのテーマ内でOR検索に切り替えた物を再度AND検索に切り替えていた。
恐らく先ほどのフォーラム記事の方もWordPressのバージョンではなくプラグインが原因なんではないかと思っている。その場合は、プラグインによって対応が違うと思うので、都度頑張る感じになる。。
さいごに
プラグインは確かに便利だけど、中のソースコードを理解していないと結構痛い目にあうなって事が多発している。
その為にも自分の技術力を磨かないと。