WordPressのカテゴリーページは、以下のようにURL内に「category」という文字列が入ります。
https://techmemo.biz/category/wordpress/
このままでも特に問題はないのですが、URLが長くなってしまうので「category」を除去したい、という場合もあるかと思います。
FV Top Level CategoriesやWP No Category Base – WPML compatibleなどのプラグインを使えば、簡単にcategoryを除去することができますが、今回はプラグインを使わずに除去する方法を紹介したいと思います。
functions.phpを使ってcategoryを除去する
まず1つ目が、functions.phpを使う方法です。以下のコードをfunctions.phpに追加することで、categoryを除去することが可能です。
function remcat_function($link) { return str_replace("/category/", "/", $link); } add_filter('user_trailingslashit', 'remcat_function'); function remcat_flush_rules() { global $wp_rewrite; $wp_rewrite->flush_rules(); } add_action('init', 'remcat_flush_rules'); 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; } add_filter('generate_rewrite_rules', 'remcat_rewrite');
上記は、DigiPressさんで紹介されていた方法で、パーマリンク設定が「/%category%/%postname%/」になっていて、サブカテゴリーが存在する場合は使えないということです。
.htaccessを使ってcategoryを除去する
2つ目は、.htaccessを使う方法です。.htaccessに以下を追加します。
RewriteRule ^category/(.+)$ http://yourdomain.com/$1 [R=301,L]
これもDigiPressさんで紹介されていた方法です。「yourdomain.com」の部分は、自サイトのドメインに変更してください。
上記を追加すると、全体としては以下のようになります。
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^category/(.+)$ http://yourdomain.com/$1 [R=301,L] RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule>
あとがき
functions.phpを使うか.htaccessを使うかは、環境に合わせて判断しましょう。functions.phpや.htaccessの編集はよくわからないという場合は、無理をせずにプラグインを使うという選択肢もアリだと思います。