前回の続き
カスタム投稿タイプは投稿タイプ=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のレイアウトを修正する必要があるけど、今日は遅いのでこの辺で。

コメント