[WordPress General] URL から category を取り除く方法
memo.
Contents
category base とは
パーマリンクの設定に %category%
を含めていると、下記のように category
とが含まれて表示されます。
http://example.com/category/your_ category
この部分は、category base と呼ばれ、パーマリンクの前に置かれるようです。
カテゴリーベースとタグベース
カテゴリーベースとカテゴリーベースは、カテゴリー/タグアーカイブのパーマリンクの前に置かれます。カテゴリーベースのデフォルト値は、categoryです。タグベースのデフォルト値は、tagです。値を変更することはできますが、取り除くことはできません。
これらのパーマリンクはほとんどのシステムで問題なく動作しますが、問題が生じる環境もあります。
取り除く方法がいくつかあるよう。
プラグインを利用する
プラグインで削除する方法が一般的なよう。
以下の3つあたりが多い。
- WordPress › WP No Category Base « WordPress Plugins
- WordPress › WP No Category Base – WPML compatible « WordPress Plugins
- WordPress › FV Top Level Categories « WordPress Plugins
ただし日本語の扱いや、プラグインをやめたらページが表示されないといった不具合報告を見かけました。
パーマリンク設定で取り除く
管理画面の「設定 ≫ パーマリンク設定」で取り除く方法。
カテゴリーベースに .
を設定する。
初期値の「category」をカレントディレクトリで置き換えるのか?
WordPress Codex あたりに記載さていても良さそうだが、なぜか載っていない。
カスタム構造の値を「/%category%/%post_id%」にすると、サブカテゴリーページが404エラーとなり、表示されなくなるため、必ず「.html」を付けてください。
これが原因?
追記(2017/03/21)
archive ページのページネーションに影響がある。
下記を設定するとうまく動くよう。
カスタム構造 /%category%/%post_id%.html
カテゴリーベース .
このブログは下記で動いている(WP-PageNavi を利用)。
カスタム構造 /blog/%year%/%monthnum%/%day%_%post_id%.html
カテゴリーベース
function.php で置換する
ディフォルトの「category」を 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 あたりに追記する。
おなじく上記で紹介されていたコード。
RewriteRule ^category/(.+)$ http://yourwordpresssite.com/$1 [R=301,L]