DigiPress

Highly Flexible WordPress Theme

WordPressのカテゴリーページでパーマリンクから”category”を取り除く4つの方法

カスタマイズ・技術情報

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でしたが、やっぱりプラグインを使った方法が一番オールマイティに安全にスラッグを書き換えれますね!

Share / Subscribe
Facebook Likes
Tweets
Hatena Bookmarks
Pinterest
Pocket
Feedly
Send to LINE