2010年11月19日金曜日

 

【WordPress】プラグイン-WP Custom Fields Search で全角スペースの複数ワード検索

テンプレートを変更する方法

[WP Custom Fields Search] で全角スペースでも検索できるようにしたい - WordPress > フォーラム
/* テンプレート「function.php」追加 */
function replace_double_byte_space_cs_query_string() {
    $_REQUEST['cs-all-1'] = str_replace( ' ', ' ', $_REQUEST['cs-all-1'] );
}
add_action( 'init', 'replace_double_byte_space_cs_query_string' );

リンク先では、テンプレートに関数を追加してフォームの全角スペースを半角スペースに置換して対応してます。
$_REQUEST['cs-all-1']」はWP Custom Fields Searchのフォーム要素の「name」。
(全てのカスタム・フィールドを対象に、ボックスの0から始まるフォーム要素数:cs-all-1)

プラグインを変更する方法

上記の方法だとテキストフォームが複数あったら、その分だけ追加しなくてはいけないので、WP Custom Fields Searchのファイルを変更するようにしました。

/* プラグイン「wp-custom-fields-search」ディレクトリ内「extra_search_fields.php」 */
class WordsLikeComparison extends LikeComparison {
    function addSQLWhere($field,$value) {
        $value = trim(mb_convert_kana($value,'s','UTF-8'));
        $words = explode(" ",preg_replace('/\s+/u', ' ', $value));
        $like = array(1);
        foreach($words as $word) {
            $like[] = $this->getLikeString($field,$word);
        }
        return "(".join(" AND ",$like).")";
    }
    function describeSearch($value){
        $value = trim(mb_convert_kana($value,'s','UTF-8'));
        return sprintf(__(' contains "%1$s"','wp-custom-fields-search'),join('"'.__(" and ",'wp-custom-fields-search').'"',explode(" ",preg_replace('/\s+/u', ' ', $value))));
    }
}

preg_replace('/\s+/u', ' ', $value)」で空白文字(連続した場合も)を半角スペースに変換します。
trim()」で先頭と末尾の空白文字を削除します。
mb_convert_kana()」はテンプレートの文字エンコードがUTF-8でプラグインはShift-JISなので空白を発見できなくなるため。
preg_replace()」は1つ以上の連続した空白文字を半角スペースに置換します。

ラベル:


コメント:
かじわらともうします。

おかげさまで全角スペースを挟んだ検索が
出来るようになりました。

ありがとうございました。
 
コメントを投稿

登録 コメントの投稿 [Atom]



この投稿へのリンク:

リンクを作成



<< ホーム

This page is powered by Blogger. Isn't yours?

登録 投稿 [Atom]

Google