ど素人から毛を生やす。<延>

新?パーマリンクからタクソノミーを消す方法

Web > WordPress > カスタム投稿 2014年6月25日(最終更新:3年前)

このページは2014.6.25に作成されています。時代の流れとそぐわない可能性があったり、僕が今以上のど素人だった頃の記事だったりするので、新しい記事を探してみるのも良いかもしれません。

どもです。
肌荒れが酷い餅。です。

特に顔、それも目の周りがぼろぼろ感。
夏のせいか、不健康なインドア生活のせいか……

それはともかくWordPress。

僕にとって、長らくの課題のひとつが、カスタム投稿を導入したときのパーマリンクを

/post_type/taxonomy/term

から、

/post_type/term

にすることでした。

 

有名なやり方としましては、こちらのサイト様の、
Custom Post Type Permalinksプラグインでチェックを入れた上で

//カスタム投稿パーマリンク「/taxonomy/」削除
function my_custom_post_type_permalinks_set($termlink, $term, $taxonomy){
	return str_replace('/'.$taxonomy.'/', '/', $termlink);
}
add_filter('term_link', 'my_custom_post_type_permalinks_set',11,3);

がありますが、functionに突っ込んでみても何故か上手くいきません。
管理画面や関数が吐き出すリンクは変更されますが、肝心のURLが変更されず、
404エラーになってしまいます。

また、functions.phpでカスタム投稿を設定する際に、

register_taxonomy(
	'タクソノミー名',
	'基づくカスタム投稿タイプ名',
	array(
		'hierarchical' => true,
		'label' => 'カテゴリー',
		'show_ui' => true,
		'query_var' => true,
		'rewrite' => array('slug' => '基づくカスタム投稿タイプ名'),
		'singular_label' => 'カテゴリー'
		)

とすると、一見上手くいくのですが、ページ送りに対応できませんでした。

 

この問題が漸く解決できたっぽいので、解決法を晒しておきます。

まず、タクソノミーを宣言するときですが、
'hierarchical' => true, と、
'rewrite' => array('slug' => 'カスタム投稿タイプ名'),
を記載しておきます。

それに加えて、以下をfunctions内に記載します。

//add_rewrite_rule('カスタム投稿タイプ名/([^/]+)/?$', 'index.php?タクソノミー名=$matches[1]', 'top'); 9/10追記:この記述はパーマリンクの設定によってはエラーの原因になるみたいなので、やっぱり下のだけでおk
add_rewrite_rule('カスタム投稿タイプ名/([^/]+)/page/([0-9]+)/?$', 'index.php?タクソノミー名=$matches[1]&paged=$matches[2]', 'top');

リライトルールという、「このURLが指定されたら、このパラメータの値を返せよ」って
感じの設定です。
上が1ページめ(こっちは要らないかも)、
下が2ページめ以降のURLを指定します。

リライトルールについては、こちらのサイト様か、こちらのPDFが詳しく解りやすく教えてくださいます。

 

これで長きに渡る悩みも解決!
したと思ったら実はしてなかった、なんてことにならなきゃ良いなぁ(笑)

この記事は役に立ちましたか?
  • (・∀・) 参考になった (0)
  • _(:3」∠)_ 面白かった  (1)
  • (`・ω・´) 役に立った (2)