ブログ内検索のURLをカスタマイズしてURLを階層化する
WordPressデフォルトの検索結果URL
WordPressの標準では、ブログ内検索のURLは、
/?s=keyword
という形式になります。このURLを
/search/keyword.html
に変更してみます。
やり方
mod_rewriteの設定
htaccessでも同様に設定することが可能ですが、本記事ではmod_rewriteで試しました。
<IfModule mod_rewrite.c> RewriteEngine On # WordPress標準の設定 RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] # ブログ内検索用URLのリライト RewriteCond %{QUERY_STRING} \\?s=([^&]+) [NC] RewriteRule ^$ /search/%1\.html? [NE,NC,R,L] </IfModule>
WordPress標準の設定に追加する形で、ブログ内検索のURLのリライト設定を追加しました。
この設定により、URLは
/search/keyword.html
にリダイレクトされるので、WordPress側でこのURLを認識できるようにします。
$wp_rewriteで検索パラメータを認識できるようにする
ブログ内検索のURLだけでなく、WordPressのURLの構造は、
$wp_rewrite
に対してカスタマイズすることで、変更することが出来ます。
今回は、ブログ内検索のURLのカスタマイズなので、
- $search_base
- $search_structure
上の双方のプロパティを利用して、URLをカスタマイズします。具体的には、functions.phpに下のPHPコードを追加します。
add_action( 'init', 'search_url_customize' ); function search_url_customize() { global $wp_rewrite; $wp_rewrite->search_base = 'search'; $wp_rewrite->search_structure = 'search/%search%.html'; // カスタマイズした直後はパーマリンク設定のflushが必要。反映後は要コメント化 // $wp_rewrite->flush_rules( false ); }
上のコードでブログ内検索用のURLのパーマリンク設定を変更することができ、mod_rewriteでリダイレクトしたURLをWordPressが扱えるようになります。
URLの確認
下の画像は、ブログ内検索をした際のURLとfirebugでネットワークを表示した状態です。
リダイレクトされていることと、日本語のURLにも対応できていることを確認できます。