2017.11.16

WordPressのカテゴリーアーカイブでURLに/category/を入れない方法


このサイトのナビゲーション「Column」と「Software Development」という項目は、WordPressのカテゴリーで管理している。それぞれのページは中身のコンテンツが違うだけで構造は同じになっている。これは、category.phpという1つのテンプレートを用意し、記事を投稿する時にカテゴリーのチェックボックスにチェックを入れると、1つのテンプレートでカテゴリーによってページを分けられるっていう仕組みになってるんだ。図のような感じ。

WordPressやcategory.php自体の詳しい作成方法は他のサイトに譲るとして、カテゴリーを使ってカテゴリーに属する記事一覧を表示するページを作ると、WordPressの仕様でURLがwww.example.com/category/columnになってしまう。この/category/を取り除きたい場合は、下記を参照してほしい。

1. パーマリンクの設定で消す

設定⇒パーマリンク設定で、カスタム構造を選択して/%category%/%postname%.htmlにする。そして、その下のオプションのカテゴリーベースにピリオド「.」だけを入れて保存する。プラグインも不要でシンプル。ただ、「.html」がついているカスタム構造でないとサブカテゴリが404のエラーになってしまうので注意してほしい。

「.html」をつけたくない場合はカスタム構造をカスタム構造を選択して/%category%/%postname%にして、Top Level Categories FixというプラグインをDLして有効化してほしい。

このサイトではURLが長くなることを嫌っているので/%category%/%post_id%として、Top Level Categories Fixを使っている。ただこのプラグイン、長年更新されていないのが不安なのでアップデートを気にする人はFV Top Level Categoriesを使うのが賢明じゃないかな。

2. プラグインを使う

とにかく省力化したいという人はWP No Category Baseを使うのが1番早い:) 設定不要で、有効化するだけ。プラグインの中身の仕様は、たしか「category」文字列をパーマリンクから削除、検索エンジンにインデックス済みの「category」つきパーマリンクにはリダイレクトがかかる的なものだったと思う。

3. .htaccessに追記する

これも結構楽だけど、.htaccessを編集する場合はバックアップを忘れないように:)


RewriteRule ^category/(.+)$ http://yourwordpresssite.com/$1 [R=301,L]