永田順伸のブログ

WordPress Search Everythingでタグを検索できない

最新のバージョンのSearch Everythingをご利用の場合は以下の修正は不要です。2010/07/25追記

WordPressは2.3以降、記事にタグをつけることができるようになった。
しかし、標準の検索機能ではこのタグまでは検索できない。

プラグインを探してみると、Search Everything というのがあった。検索範囲を広げる機能があり、このタグの検索にも対応している。
さっそく、ダウンロードしていつものように展開して、ディレクトリごとpluginディレクトリ下にアップロードした。管理画面で有効化したあと、タグを検索できるようにオプションを設定した。

ユーザ画面に戻り、漢字でタグを登録して、検索してみるが結果が表示されない。
日本語版を探したり、バージョンが高いものや、逆にひとつだけ落として試したみたが、まったく検索できない。海外で作成されたものにはよくあることなので、キーワードの扱いを確認することにした。

まずは、登録したタグがどこにあるかデータベースのテーブルの中を確認してみた。wp_termsに登録されていた。ここは問題なし。次に、プラグイン内の機能を利用してログを取得できるようにして、再度検索してみる。ログの中を見ると正常にSQLが生成されていて、問題なさそう。テーブルとSQLを見比べているうちに、slugを検索していることに気づいた。
小説は「%e5%b0%8f%e8%aa%ac」のように登録されている。半角英数字だと変換されないので slug内を検索してもうまくいくが、日本語では検索できない。原因がわかったので、search_everything.phpの227行目あたりのfunction SE4_search_tags内の検索用のSQLをslugからnameに変更した。

$where .= ” OR ( tter.slug LIKE ‘%” . str_replace(‘ ‘, ‘-‘,$wpdb->escape($wp_query->query_vars[‘s’])) . “%’) “;
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
$where .= ” OR ( tter.name LIKE ‘%” . str_replace(‘ ‘, ‘-‘,$wpdb->escape($wp_query->query_vars[‘s’])) . “%’) “;

再度、検索してみるとこんどはタグの中を検索して記事を表示できた。

モバイルバージョンを終了