WordPressを使っている人なら、大抵はパーマリンクの設定を変更していると思います。
日付ベースや数字ベースなどのプリセットもありますが、カスタム構造で/%category%/%postname%/
として「カテゴリー名/投稿名」なんていう設定をしているケースも多いのでは?
しかし、このままでは実際のカテゴリーページはサイトのURLの後に「category」という文字列が入ってしまいます。
カテゴリーページのパーマリンク
http://example.com/category/gadget/
本来表示したいパーマリンク
http://example.com/gadget/
この不要な「category」文字列をカテゴリーページのパーマリンクから取り除く方法をご紹介します。
1. パーマリンク設定のみで取り除く(プラグイン不要)
これが一番簡単でシンプルな方法です。
WordPress管理画面の「設定」→「パーマリンク設定」の “カテゴリーベース” に 「.」 (ドットのみ)を指定して保存するだけ!
ただし、パーマリンク設定を/%category%/%postname%/
としている場合、このカテゴリーベースでは404エラーとなってサブカテゴリーページが表示されません。
この設定が使えるのは、/%category%/%postname%.html
というカスタム構造にて運用しているケースのみに有効なので注意してくださいね。
2. プラグインを使って取り除く
「WP No Category Base」というプラグインを使えばすべて解決!
設定不要、ただインストールして有効にするだけでOKです。
http://wordpress.org/plugins/wp-no-category-base/
ちなみに、このプラグインで「category」文字列をパーマリンクから削除後、検索エンジンにインデックス済みの「category」付きのURLからアクセスされてもちゃんとリダイレクトされるのでご安心を。
3. function.phpでデフォルトのスラッグを置換して取り除く
以下を function.php に追加します。
add_filter('user_trailingslashit', 'remcat_function'); function remcat_function($link) { return str_replace("/category/", "/", $link); } add_action('init', 'remcat_flush_rules'); function remcat_flush_rules() { global $wp_rewrite; $wp_rewrite->flush_rules(); } add_filter('generate_rewrite_rules', 'remcat_rewrite'); function remcat_rewrite($wp_rewrite) { $new_rules = array('(.+)/page/(.+)/?' => 'index.php?category_name='.$wp_rewrite->preg_index(1).'&paged='.$wp_rewrite->preg_index(2)); $wp_rewrite->rules = $new_rules + $wp_rewrite->rules; }
これは1番目のパーマリンク設定のみの方法と同じことを、テーマの function.php からWordPressにフックしています。
なのでこちらもパーマリンク設定が/%category%/%postname%/
でサブカテゴリーを持つ場合はNGです。
4. .htaccessで取り除く
既存の.htaccessをバックアップしてから、以下の1行を追記します。
RewriteRule ^category/(.+)$ http://yourwordpresssite.com/$1 [R=301,L]
※もちろん「yourwordpresssite.com」はあなたのサイトのドメインに置き換えて!
以上、既出感満載なTipsでしたが、やっぱりプラグインを使った方法が一番オールマイティに安全にスラッグを書き換えれますね!