【解決】WordPressのサイト内キーワード検索で、ワードが含まれないのに記事がヒットする謎現象

Web関連
Web関連

表題の通りです。これすごく困った。
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 );

 

この問題、気付いたのはごく最近ですが、症状自体は昔からあるみたいです。
個人店や中小企業のホームページを作成しているとサイト内検索なんてほとんど使わないので、今まで気付かなかったんでしょうね。。

 

偉大な先人たちに感謝を。

タイトルとURLをコピーしました