WordPress 4.0では、空文字の検索に対する挙動が変わったようです。
そこで、変更点や対処の例をまとめました。
バージョン4.0=大幅なリニューアル、ではないようです
2014年9月5日に、WordPress 4.0がリリースされました。
3.9から4.0へのアップデートで、大きな変更があるのかと思いきや、3.8→3.9の時と同じようなアップデートに過ぎないようです。
そんなわけで、今まで使用していた自作のテーマファイルも、特にコードの見直しなどを求められる事なく、WordPress4.0でも問題無く動きました。
しかし、検索時の挙動が少し変わってしまったようです。
変更された、空文字の検索の挙動
例えば、検索ボックスに何も入れずに、検索ボタンをクリックしてみます。
すると、検索用のパラメータs
に空文字が送られ、URLはこのようになります。
この場合、今までのWordPress(バージョン3.9まで)では、検索結果ページではなく、ホームページが表示されました。
また、条件分岐タグis_search
の戻り値はfalse
でした。
いっぽう、WordPressのバージョン4.0では、検索結果ページが表示されるようになり、条件分岐タグis_search
の戻り値はtrue
を返すようになりました。
挙動を今まで通りに戻すのは困難
ホームページでなく検索結果ページが表示されるようになったという仕様変更で、不都合が生じるケースはそれほど無いのではと思われます。
むしろ、検索機能を拡張して、カテゴリ検索機能などを実装した場合、s
パラメータを空で送りつつ、(カテゴリなどの)検索結果を表示させたい場合もありますので、そういったケースを考えた仕様変更なのかと思います。
もし、挙動を今まで通りに戻したい場合、テーマの関数ファイル(functions.php)で対応できないかと思いましたが、完全に元の仕様に戻すのは困難なようです。(システムのソースファイルに手を加えれば簡単なのですが、決してお勧めできる解決法ではありません。)
空文字の検索はホームにリダイレクトする
それでは、ちょっと乱暴な気もしますが、空文字の検索はホーム(フロントページ)にリダイレクトさせてしまうのはどうでしょう。
この仕様にする場合、次のコードをテーマの関数ファイル(functions.php)に追加します。
1 2 3 4 5 6 7 8 9 10 |
function empty_search_redirect( $wp_query ) { if ( $wp_query->is_main_query() && $wp_query->is_search && ! $wp_query->is_admin ) { $s = $wp_query->get( 's' ); if ( empty( $s ) ) { wp_safe_redirect( home_url('/') ); exit; } } } add_action( 'parse_query', 'empty_search_redirect' ); |
これで、検索ボックスに何も入力しないで検索ボタンをクリックした場合、つまりは、
にアクセスした場合、
にリダイレクトされるようになります。
スペースのみの検索もリダイレクトさせる
検索ボックスにスペースのみを入力して、検索ボタンをクリックした場合にも、ホーム(フロントページ)にリダイレクトするようにします。
テーマの関数ファイル(functions.php)に、前出のコードの代わりに、以下のコードを追加します。
1 2 3 4 5 6 7 8 9 10 11 |
function empty_search_redirect( $wp_query ) { if ( $wp_query->is_main_query() && $wp_query->is_search && ! $wp_query->is_admin ) { $s = $wp_query->get( 's' ); $s = trim( $s ); if ( empty( $s ) ) { wp_safe_redirect( home_url('/') ); exit; } } } add_action( 'parse_query', 'empty_search_redirect' ); |
WP Multibyte Patchプラグインを有効にしている場合(日本語サイトの場合、ほとんどのケースで有効にしていると思います)、全角スペースでも半角スペースの場合と同じくリダイレクトされるようになります。
TRACKBACKS