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

Web関連
Web関連

表題の通りです。これすごく困った。
WordPressでキーワード検索をした際、あきらかにキーワードが含まれていない記事もヒットすることがありました。
しかも条件や規則性がまったく分からない。

 

困ったのでいつものようにGoogle先生を頼ると、とても素晴らしい方々の記事を見つけることができました。
以下のサイト様をと~~~っても参考にさせて頂きました。多謝。

 

WordPressサイト内検索に、一見全く関係なさそうな記事が出てくる「ゴルゴ問題」 – 運営堂サイト裏話(4)
運営堂さんサイトリニューアルにあたって苦労したところを書き残しておくシリーズの4つ目です。WordPressにはブログ内検索機能がありますが、あくまでブログ用のデータベースの中をさらって結果を返してきているだけなので、正式な検索用途として作り込まれているわけではない簡易的なものであることを忘れてはいけません。以下は、そ...

 

WordPressサイト内検索で濁点あり/なしがうまく検索できない | mt8
WordPressのサイト内検索で、「ワードプレス」って検索したら「ワートプレス」も引っかかります。(例えが悪い)A.11.MySQL5.6FAQ:MySQLの中国語、日本語、および韓国語の文字セットこの辺りを読んでおこうと思

 

 

要するに、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をコピーしました