表題の通りです。これすごく困った。
WordPressでキーワード検索をした際、あきらかにキーワードが含まれていない記事もヒットすることがありました。
しかも条件や規則性がまったく分からない。
困ったのでいつものようにGoogle先生を頼ると、とても素晴らしい方々の記事を見つけることができました。
以下のサイト様をと~~~っても参考にさせて頂きました。多謝。
https://mypacecreator.net/blog/archives/3211
https://mt8.biz/295
要するに、WordPressはMySQLで動いているのですが、テーブルが「utf8_general_ci」だとキーワード検索の判別が「大文字・小文字、ひらがな・カタカナ、濁音・半濁音を区別しない」ようになっているので、一見関係なさそうな記事まで引っかかってくるということですね。
例を挙げると、「iPhone」と検索すると「IPHONE」「iphone」までヒットします。
これならまだいいのですが、「パン」と検索すると「バン」「はん」とかまでヒットするので、えらいことになります。
この問題は、SQLを「LIKE」から「LIKE BINARY」にすることで回避できます。
長々と能書きを垂れましたが、最終的にfunctions.phpに以下を追記することで解決できました。
function my_posts_where( $where, $obj ) { if ( $obj->is_search ) { $where = str_replace( 'LIKE', 'LIKE BINARY', $where ); } return $where; } add_filter( 'posts_where', 'my_posts_where', 10, 2 );
この問題、気付いたのはごく最近ですが、症状自体は昔からあるみたいです。
個人店や中小企業のホームページを作成しているとサイト内検索なんてほとんど使わないので、今まで気付かなかったんでしょうね。。
偉大な先人たちに感謝を。