HOME > WordPress > カスタム投稿タイプ関連メモ(ターム、アーカイブや条件分岐など)

カスタム投稿タイプ関連メモ(ターム、アーカイブや条件分岐など)

カスタム投稿タイプの投稿や一覧、カテゴリー表示やカテゴリー一覧表示などのまとめ。

まずカスタム投稿タイプに関する言葉の整理

何度も調べなおす言葉の使い方。

カスタム投稿タイプ
任意に作った「post(投稿)」。表示に使われるテーマファイルはsingle.php、single-カスタム投稿タイプのスラッグ.php。一覧ページはarchive.php、archive-カスタム投稿タイプスラッグ.php
タクソノミー
カスタム投稿タイプに紐づけている場合は、そのカスタム投稿タイプのカテゴリーみたいな役割を果たす。固定ページを作成し、page-タクソノミースラッグ.phpをテンプレートに選択することでターム一覧を表示できる。
ターム
タクソノミーがカテゴリーだとしたら、タームは個々のカテゴリー名のこと。表示に使われるテーマファイルはtaxonomy.php、taxonomy-タクソノミースラッグ-タームスラッグ.php
  • トップページ
  • 固定ページ
    • 投稿アーカイブ
    • 投稿カテゴリー一覧
      • 投稿カテゴリー(カテゴリー名)
        • 投稿1
        • 投稿2
    • カスタム投稿アーカイブ
    • タクソノミー(ターム一覧)
      • タクソノミー(ターム名)
        • カスタム投稿1
        • カスタム投稿2

カスタム投稿タイプの情報を表示する

single-カテゴリースラッグ.phpで表示

▼カスタム投稿タイプに紐づいたターム(カテゴリー名みたいなもの)を表示する

<?php $terms = get_the_terms($post->ID,'タームスラッグ');
foreach( $terms as $term ) :?>
<?php echo $term->name; ?>
<?php endforeach; ?>

▼そのカスタム投稿が属するタームで条件分岐する

<?php if( has_term('特定ターム名','タクソノミースラッグ') ) {?>
      カスタム投稿タイプ「製品」用のカスタムタクソノミー「製品カテゴリー」に登録しているターム「車」「バイク」「自転車」 で条件分岐する 
<?php } ?>

page-タクソノミースラッグ.phpでターム情報を表示

カスタムタクソノミーのアーカイブページを作りたい場合。
固定ページを作り、専用のテーマファイル(page-タクソノミースラッグ.php)を選択する。

▼基本のループ

<?php
	$taxonomy_name = 'カスタム投稿スラッグ';
	$taxonomys = get_terms('$taxonomy_name','hide_empty=0');
	foreach ( $taxonomys as $taxonomy ) : ?>	
	(各タームのURL)<a href="<? echo home_url( '$taxonomy_name' ) ; ?>/<? echo esc_html($taxonomy->slug) ; ?>/">
	(スラッグ)<? echo esc_html($taxonomy->slug) ; ?>.png" alt=""/>
<?php endforeach; ?>

タームでカスタムフィールドを使っている場合。
たとえば、カスタムタクソノミー「製品カテゴリー」で各カテゴリー用の見出し画像を登録する場合など。

<?php
	$taxonomy_name = 'カスタム投稿スラッグ';
	$taxonomys = get_terms('$taxonomy_name','hide_empty=0');
	foreach ( $taxonomys as $taxonomy ) : ?>
	<?php //各ターム登録のカスタムフィールドの値をとる
                $term_id = esc_html($taxonomys->term_id);
                $term_idsp = $taxonomy_name . '_' . $term_id;
                $term_items = get_field('カスタムフィールド名',$term_idsp);
	?>
	(各タームのURL)<a href="<? echo home_url( '$taxonomy_name' ) ; ?>/<? echo esc_html($taxonomy->slug) ; ?>/">
	(スラッグ)<? echo esc_html($taxonomy->slug) ; ?>.png" alt=""/>
	(カスタムフィールドの値)<?php echo $term_items; ?>
<?php endforeach; ?>

ちなみに、page.phpで、固定ページのスラッグを表示する方法は下記。

<?php $page_slug = $post->post_name;
	echo  $page_slug; ?>

と書いたけど、もっと簡単に、

<?php echo esc_attr($post->post_name);?>">

どう違うのかな。調べないと。

taxonomy-タクソノミースラッグ.phpでターム情報を表示

タクソノミーに登録したタームごとのページを作る場合に使う。

たとえば、
カスタム投稿タイプ「製品」
カスタムタクソノミー「製品カテゴリー」
「製品カテゴリー」に「車」「バイク」「自転車」といったタームが登録されている場合。

▼タームスラッグを表示する

<?php echo $term ?>

▼タームタイトル(ターム名)を表示する

<?php single_term_title(); ?>

▼タームディスクリプションを表示する(カテゴリーの説明みたいなカ所)

<?php echo term_description();//pタグありで出力 ?>
<?php echo strip_tags(term_description());//pタグを削除して出力 ?>

▼ターム一覧を表示する

<?php
	$terms = get_terms('タクソノミースラッグ','hide_empty=0');//hide_empty=0で投稿が無くても表示させている
	foreach ( $terms as $term ) : ?>
	<? echo  esc_html($term->name);//ターム名 ?>
	<? echo esc_html($term->slug) ;//タームスラッグ ?>
	<? echo '<a href="'.get_term_link($term).'">'.$term->name.'</a>';//タームページへのリンクとターム名 ?>
<?php endforeach; ?>

条件分岐

▼投稿タイプ(「製品(products)」という投稿タイプならproducts)

<?php if (get_post_type() === '投稿タイプスラッグ'): ?>

▼投稿タイプのアーカイブページ(「製品(products)」という投稿タイプならproducts)

<?php if (is_post_type_archive('投稿タイプスラッグ')): ?>

▼タクソノミーアーカイブ(「製品」に紐づけているproducts_catなら、products_cat)

<?php if (is_tax('タクソノミースラッグ')): ?>

▼タームアーカイブページ(「製品」に紐づけているproducts_catの中のcat01なら、’products_cat’, ‘cat01’)

<?php if(is_tax('タクソノミースラッグ', 'タームスラッグ')): ?>
参考サイト