どもです。
肌荒れが酷い餅。です。
特に顔、それも目の周りがぼろぼろ感。
夏のせいか、不健康なインドア生活のせいか……
それはともかくWordPress。
僕にとって、長らくの課題のひとつが、カスタム投稿を導入したときのパーマリンクを
から、
にすることでした。
有名なやり方としましては、こちらのサイト様の、
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が詳しく解りやすく教えてくださいます。
これで長きに渡る悩みも解決!
したと思ったら実はしてなかった、なんてことにならなきゃ良いなぁ(笑)