[WordPress General] URL から category を取り除く方法
memo.
[markdown]
## category base とは
パーマリンクの設定に `%category%` を含めていると、下記のように `category` とが含まれて表示されます。
“`prettyprinted
http://example.com/category/your_ category
“`
この部分は、category base と呼ばれ、パーマリンクの前に置かれるようです。
> * [パーマリンクの使い方 – WordPress Codex 日本語版](http://wpdocs.sourceforge.jp/Using_Permalinks#.E3.82.AB.E3.83.86.E3.82.B4.E3.83.AA.E3.83.BC.E3.83.99.E3.83.BC.E3.82.B9.E3.81.A8.E3.82.BF.E3.82.B0.E3.83.99.E3.83.BC.E3.82.B9)
>
> カテゴリーベースとタグベース
>カテゴリーベースとカテゴリーベースは、カテゴリー/タグアーカイブのパーマリンクの前に置かれます。
>
> カテゴリーベースのデフォルト値は、categoryです。タグベースのデフォルト値は、tagです。値を変更することはできますが、取り除くことはできません。
> これらのパーマリンクはほとんどのシステムで問題なく動作しますが、問題が生じる環境もあります。
取り除く方法がいくつかあるよう。
## プラグインを利用する
プラグインで削除する方法が一般的なよう。
> * [category baseはどのプラグインで削るか | ZAKKINKS](http://zakkinks.com/category_base_strip_plugin/)
以下の3つあたりが多い。
* [WordPress › WP No Category Base « WordPress Plugins](http://wordpress.org/plugins/wp-no-category-base/)
* [WordPress › WP No Category Base – WPML compatible « WordPress Plugins](http://wordpress.org/plugins/no-category-base-wpml/)
* [WordPress › FV Top Level Categories « WordPress Plugins](http://wordpress.org/plugins/fv-top-level-cats/)
ただし日本語の扱いや、プラグインをやめたらページが表示されないといった不具合報告を見かけました。
> * [[WordPress]WP No Category Baseと日本語カテゴリー名で404になる問題 | kanonjiのブログ](http://kanonji.info/blog/2013/05/29/wordpresswp-no-category-base%e3%81%a8%e6%97%a5%e6%9c%ac%e8%aa%9e%e3%82%ab%e3%83%86%e3%82%b4%e3%83%aa%e3%83%bc%e5%90%8d%e3%81%a7404%e3%81%ab%e3%81%aa%e3%82%8b%e5%95%8f%e9%a1%8c/)
## パーマリンク設定で取り除く
管理画面の「設定 ≫ パーマリンク設定」で取り除く方法。
カテゴリーベースに `.` を設定する。
> * [Remove category & tag base from WordPress url – without a plugin – Stack Overflow](http://stackoverflow.com/questions/17798815/remove-category-tag-base-from-wordpress-url-without-a-plugin)
初期値の「category」をカレントディレクトリで置き換えるのか?
WordPress Codex あたりに記載さていても良さそうだが、なぜか載っていない。
> * [【WordPress】パーマリンク設定のカテゴリーベースとは? – ysklog](http://ysklog.net/wordpress/30.html)
>
> カスタム構造の値を「/%category%/%post_id%」にすると、サブカテゴリーページが404エラーとなり、表示されなくなるため、必ず「.html」を付けてください。
これが原因?
### 追記(2017/03/21)
archive ページのページネーションに影響がある。
下記を設定するとうまく動くよう。
“`prettyprinted
カスタム構造 /%category%/%post_id%.html
カテゴリーベース .
“`
このブログは下記で動いている(WP-PageNavi を利用)。
“`prettyprinted
カスタム構造 /blog/%year%/%monthnum%/%day%_%post_id%.html
カテゴリーベース
“`
## function.php で置換する
ディフォルトの「category」を function.php を使って削除する。
> * [【Tips】WPのカテゴリーページでパーマリンクから”category”を取り除く4つの方法](http://digipress.digi-state.com/wordpress/tips/4-tips-to-remove-category-base-from-parmalink-on-wordpress/)
上記で紹介されていたコード。
“`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 あたりに追記する。
> * [【Tips】WPのカテゴリーページでパーマリンクから”category”を取り除く4つの方法](http://digipress.digi-state.com/wordpress/tips/4-tips-to-remove-category-base-from-parmalink-on-wordpress/)
おなじく上記で紹介されていたコード。
“`prettyprinted
RewriteRule ^category/(.+)$ http://yourwordpresssite.com/$1 [R=301,L]
“`
[/markdown]