理想
- カスタム投稿タイプのアーカイブ
- http://xxx.xx/カスタム投稿タイプ/
- カスタム投稿タイプ + カスタム分類のアーカイブ
- http://xxx.xx/カスタム投稿タイプ/ターム/
- カスタム投稿タイプ + カスタム分類の投稿ページ
- http://xxx.xx/カスタム投稿タイプ/ターム/投稿ページ/
現実
- カスタム投稿タイプのアーカイブ
- http://xxx.xx/カスタム投稿タイプ/
- カスタム投稿タイプ + カスタム分類のアーカイブ
- http://xxx.xx/カスタム分類/ターム/
- カスタム投稿タイプ + カスタム分類の投稿ページ
- http://xxx.xx/カスタム投稿タイプ/投稿ページ/
解決策はまだわからないけど、忘れないようにメモ。
とか試してみたけどどちらもダメだった。カスタム投稿タイプもカスタム分類も「Custom Post Type UI」で管理してるけどそのせいもあるのかな?
追記 2011.06.09
プラグインを削除しfunctions.phpに書き直したものの、結局ダメ。
上記とほぼ同じことを実現したかったので沿ってやってみたけど、カスタム投稿タイプ名と、カスタム分類名がダブると上手く動作しない。とりあえずカスタム分類の登録を以下のように書き換え。
$args = array( 'label' => 'Q&Aカテゴリー', 'public' => true, 'show_ui' => true, 'hierarchical' => true, 'rewrite' => array('slug' => 'faq/faq-category') ); register_taxonomy('faq-category', 'faq', $args);
- カスタム投稿タイプ + カスタム分類のアーカイブ
- http://xxx.xx/カスタム投稿タイプ/カスタム分類/ターム/
完璧ではないけど、カスタム分類をカスタム投稿タイプの下層に設定することができた。
もう一つ問題発生。なんと、「http://xxx.xx/カスタム投稿タイプ/」でカスタム投稿タイプのアーカイブが表示されず、404となってしまう。has_archiveをtrueにしても、スラッグを指定してもダメ(後々わかったことだけど、has_archiveにtrueを指定すると表示されるようになった。既存の固定ページ等とスラッグがかぶっていたりしたのかもしれない。詳しい原因は不明)。一応、archive-カスタム投稿タイプ.phpも配置している状況。ちなみに「「http://xxx.xx/?post_type=カスタム投稿タイプ」は表示される。困った。
ちょっと強引だけど、固定ページでカスタム投稿と同じスラッグのページを作成し、カスタム投稿のアーカイブを表示されるテンプレートをあてることで表示された。スマートじゃないよなぁ。。
肝心の投稿ページだけど、こっちも理想のパーマリンクにすることはできなかった。まぁ、なんで投稿ページをカスタム分類の下層に入れたいかというと、jQueryのオリジナルプラグインで、自動的にメニューを反転させる場合にそういうパーマリンクじゃないと上手く動作してくれないからなわけで、もうここはJSでなく、HTML出力の段階で処理してしまおうと。カスタム分類(ローカルメニューに相当)の出力を
<?php $termId = ''; if($postTerms = wp_get_post_terms(get_the_ID(), 'faq-category')){ $termId = $postTerms[0]->term_id; } ?> <ul> <?php wp_list_categories('taxonomy=faq-category&title_li=¤t_category='.$termId); ?> </ul>
とすれば、その投稿が属するメニューにclassがふられる。パーマリンリンクが気持ち悪いままだけど、とりあえず表面上の見た目はなんとかなったので…良いのか?