WordPress カテゴリーページでパーマリンクから”category”を取り除く
WordPress プラグインなしで「category」を除外する方法 category base 削る
【WordPress】パーマリンク設定のカテゴリーベースとは?
WordPressの管理画面→設定→パーマリンク設定で「カスタム構造」を利用している人は多いと思いますが、その下のオプション「カテゴリーベース」や「タグベース」は見て見ぬフリをしているはず(私がそうです)。WPのカテゴリーページでパーマリンクから”category”を取り除く4つの方法
1.カテゴリーベースとは?
カテゴリーベースとは、カテゴリーのURL(カテゴリー一覧ページのURL)の指定に利用するものです(記事のURLには全く無関係)。
通常、「wordpress」というカテゴリーを作成した場合、そのカテゴリーのURLは
http://www.eccube.org/category/wordpress/
となります。そう、カテゴリー名(カテゴリーのスラッグ名)の前に「category」という単語が自動的に入ります。そこでカテゴリーベースの項目に「hoge」を設定すると、「wordpress」カテゴリーのURLは
http://www.eccube.org/hoge/wordpress/
となります。
2.カテゴリー名の前につく「category」を除外する方法
「wordpress」というカテゴリーを作成した場合、そのカテゴリーURLは
http://www.eccube.org/wordpress/
としたいところです(考え方としては、サイト構造として「wordpress」というディレクトリを作成したようにしたい)。
その方法ですが、カテゴリーベースに「.」(ドット)をつけるだけです。それだけで、カテゴリーURLに自動でつく「category」という単語をURLから除外できます。
3.蛇足
カテゴリーベースに「.」を設定し、「domein」というカテゴリを作成した場合、そのURLは以下のようになります。
http://www.eccube.org/domein
その「domein」のカテゴリにはいくつかの記事が所属するわけですが、その記事のURLは特別な設定をしていない場合、次のようにデフォルトのURLになります。
http://www.eccube.org/?p=123
しかし、せっかく「domein」というカテゴリに所属しているならば、以下のようにしたいところです。
http://www.eccube.org/domein/123.html
その方法は、以下のようにするだけです。
つまり、カスタム構造を「/%category%/%post_id%.html」、カテゴリーベースを「.」にするだけです。
なお、カスタム構造の値を「/%category%/%post_id%」にすると、サブカテゴリーページが404エラーとなり、表示されなくなるため、必ず「.html」を付けてください。
或は、
/%category%/%postname%/
プラグインを利用する
プラグインで削除する方法が一般的なよう。
以下の3つあたりが多い。
WordPress › WP No Category Base « WordPress Plugins
WordPress › WP No Category Base – WPML compatible « WordPress Plugins
WordPress › FV Top Level Categories « WordPress Plugins
ただし日本語の扱いや、プラグインをやめたらページが表示されないといった不具合報告を見かけました。
function.php で置換する
ディフォルトの「category」を 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;
}
WordPress の内部についても分かってないといけないですね。
Apache の mod_rewrite で書き換える
.htaccess あたりに追記する。
既存の.htaccessをバックアップしてから、以下の1行を追記します。
RewriteRule ^category/(.+)$ http://yourwordpresssite.com/$1 [R=301,L]
※もちろん「yourwordpresssite.com」はあなたのサイトのドメインに置き換えて!
以上、既出感満載なTipsでしたが、やっぱりプラグインを使った方法が一番オールマイティに安全にスラッグを書き換えれますね!