全角カナ・英数字を半角に正規化してから検索する例。

$s = isset( $_GET['query'] ) ? sanitize_text_field( wp_unslash( $_GET['query'] ) ) : '';
$s = mb_convert_kana( $s, 'a' );

query_posts( array(
    's' => $s,
) );

mb_convert_kana($s, 'a')は、全角英数字を半角に変換するための処理(日本語サイトの検索でよくある正規化)。

注意点(元のコードからの修正点)

  • 入力のサニタイズ漏れ:元のコードは$_GET['query']の値をそのままエスケープせずに使用していた。ユーザー入力は必ずsanitize_text_field()などでサニタイズしてから使用する。
  • &s=' . $sはタイトルのみ検索、という記述は誤り:WordPressのデフォルト検索(パブリッククエリs)は、投稿タイトルだけでなく本文(post_content)・抜粋(post_excerpt)も対象にLIKE検索を行う。タイトルのみに絞りたい場合は、pre_get_postsでSQLのWHERE句をposts_whereフィルターなどを使って書き換える、またはsearch_only_titleのような専用プラグインを利用する必要がある。
  • query_posts()は非推奨:メインクエリを書き換えるquery_posts()の使用は公式に非推奨とされている(クエリの編集を参照)。検索結果に絞り込みをかけたい場合はpre_get_postsアクションを使うのが推奨される方法。
  • global $query_string;は使用しない:この記法は古いバージョンのWordPressの慣習であり、現在は推奨されない。

推奨される書き方(pre_get_postsを使う例)

add_action( 'pre_get_posts', function ( $query ) {
    if ( ! is_admin() && $query->is_main_query() && $query->is_search() ) {
        $s = isset( $_GET['query'] ) ? sanitize_text_field( wp_unslash( $_GET['query'] ) ) : '';
        $s = mb_convert_kana( $s, 'a' );
        $query->set( 's', $s );
    }
});