WordPress 検索結果のURLをカスタマイズ

ブログ内検索の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

に対してカスタマイズすることで、変更することが出来ます。

WP Rewrite Codex

今回は、ブログ内検索の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でネットワークを表示した状態です。

wordpress-search-url

リダイレクトされていることと、日本語のURLにも対応できていることを確認できます。

検索フォームのカスタマイズ

Webエンジニアブログにコメント

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

WordPress 検索結果のURLをカスタマイズの記事にコメントを投稿

カスタマイズ