【WordPress】カテゴリーページへのリンクを任意のページへのリンクに変換する方法

【WordPress】カテゴリーページへのリンクを任意のページへのリンクに変換する方法

WordPressでカテゴリーページへのリンクを任意のページへのリンクに変換する方法を紹介します。

カテゴリーページの代わりに投稿ページを用意して、カテゴリーページの代わりに用意した投稿ページを表示したいときに使えます。

この方法を使うと以下のことができます。

  1. テンプレート内で生成されるカテゴリーページへのリンクを任意のページへのリンクに変換する
  2. カテゴリーページのURLに直接アクセスすると、任意のページのURLにリダイレクトする

user_trailingslashitフィルターを使って、WordPressが生成するURLを任意のURLに書き換えます。

カテゴリーページのURLが「/category/hokkaido/」のようになっており、カテゴリーページへのリンクを、URLが「/hokkaido/」の投稿ページにリンクするように変換したい場合、functions.phpに以下のコードを記述します。

function remcat_function($link) {
	$link = str_replace('/category/', '/', $link);
	return $link;
}
add_filter('user_trailingslashit', 'remcat_function');

user_trailingslashitフィルターはカテゴリーページ以外のURLも書き換えることができるので、置換パターンを変更することで、サイト構成に併せて柔軟なURL設計が可能です。

投稿ページを用意するのではなく、変換後のURLでカテゴリーページを表示したい場合は、functions.phpに以下のコードを記述します。これは、パーマリンク設定でカテゴリーページのURL構成を変更するのと同じ効果があります。

function remcat_function($link) {
	$link = str_replace('/category/', '/', $link);
	return $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');

参考