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つ以上の連続した空白文字を半角スペースに置換します。
ラベル: WordPress
登録 投稿 [Atom]

