カスタム投稿タイプを含んだパンくずリストが表示されない – その2

前回の続き

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

コメント

タイトルとURLをコピーしました