前回の続き
カスタム投稿タイプは投稿タイプ=postではないので、get_category_parentsは使用できない。
google先生に聞いてみると、他にも似たような悩みを抱えている人は多かったけど、
どうもピンとくる解決法が見つからない。
とりあえず、以下のようにする事で、それっぽく表示する事はできた。
if ( is_single() ) { $category = get_the_category(); $category_id = get_cat_ID( $category[0]->cat_name ); if ($category_id == 0) { // カスタム投稿タイプ echo ' » '. esc_html( get_post_type_object( get_post_type() )->label).' » '; } else { // POST echo ' » '. get_category_parents( $category_id, TRUE, " » " ); } echo the_title('','', FALSE) .""; }
ただし、これはごまかし。
今回の場合、「information」と言うカスタム投稿タイプを作成したのだが、
informationの記事を表示すると、
「home » information » 記事のタイトル」
と言う感じのパンくずリストが表示される。
しかし、「information」は投稿タイプ名を表示しているだけで、リンクになっていない。
イメージとしては、informationをクリックすると、informationのアーカイブに遷移させたいのだが、これがうまくいかない。
カスタム投稿タイプはパーマリンク設定が弱いと言う事で、
「Custom Post Type Permalinks」と言うプラグインを入れてみたものの、どうもしっくりこない。
要するに、通常は「投稿(post)」と言う投稿タイプの○○と言うアーカイブを扱っているのだが
今回のケースだと「information」と言う投稿タイプのアーカイブを扱おうとしている。
つまり、レベルがひとつ上になっているだ。
これに気づくまでに時間がかかった・・・。
それを踏まえて調べてみると、「get_post_type_archive_link」でアーカイブへのリンクが取得できるとの事。
しかし、実装しても何も出力されない。
なんでだろう???と思ったら、
カスタム投稿タイプのアーカイブは作成時のオプションで「has_archive」をtrueに設定しなければ使えないんだとか。
はたして、そのオプションをtrueに設定してみると・・・出た!!
実際の実装は以下の通り。
$category = get_the_category(); $category_id = get_cat_ID( $category[0]->cat_name ); if ($category_id == 0) { // カスタム投稿タイプ $post_type_object = get_post_type_object( get_post_type() ); // アーカイブページへのリンクを出力 echo ' » '; echo 'name ). '>'; echo esc_html( get_post_type_object( get_post_type() )->label ); echo ''; echo ' » '; } else { // POST echo ' » '. get_category_parents( $category_id, TRUE, " » " ); } echo the_title('','', FALSE) ."";
ちゃんと、archive.phpを表示してる。
週末は結構悩んだんだけど、解決するときはするっと解決してしまうもんだね。
まだ、archive.phpのレイアウトを修正する必要があるけど、今日は遅いのでこの辺で。
コメント