カスタムタクソノミーとタームの出力

タクソノミーとターム

記事の分類で「カテゴリー」と「タグ」が用意されていますが、「カスタムタクソノミー」という方法で、別分類を追加することができます。

また、この「カスタムタクソノミー」を使うことで、カスタム投稿にもタグ・カテゴリーを設定することが可能で、それを出力する時の関数です。

ターム名の出力

カスタムタクソノミーで指定したターム名を、文字列で出力します。

PHP

<?php single_term_title(); ?>

ループの中でタクソノミーを指定してターム名を出力

ループの中でカスタムタクソノミーを指定して、タイム名を文字列で出力する場合は以下のように記述します。

PHP

<?php
    if ($terms = get_the_terms($post->ID, 'library')) {
        foreach ( $terms as $term ) {
            echo ('<span>') ;
            echo esc_html($term->name)  ;
            echo ('</span>') ;
        }
    }
?>

タームの説明の出力

カスタムタクソノミーで指定したタームの「説明」を出力します。

PHP

<?php echo term_description(); ?>

その記事のタームをリンク付きで出力

その記事のタクソノミーのタームを、a タグのリンクで出力します。

PHP

<?php
$terms = get_the_terms($post->ID,'タクソノミー名');
foreach( $terms as $term ) {
echo '<a href="'.get_term_link($term->slug, 'タクソノミー名').'" class="manualcategory">'.$term->name.'</a>';
}
?>

タームごとに記事一覧を生成

まず、カスタム投稿にタクソノミーを作ります。そして、そのタクソノミーに紐付けるtaxonomy-[タクソノミーのslug].phpに、以下のコードを記述してターム毎の記事一覧を出力します。

PHP

<?php
$taxonomy_name  = get_query_var('taxonomy');
$tax_posts = get_posts(array('post_type' => get_post_type(), 'taxonomy' => $taxonomy_name, 'term' => $taxonomy->slug ) );
$term_var = get_query_var( 'term' );
$myQuery = new WP_Query();
$param = array(
    'posts_per_page' => '-1', //表示数
    'post_type' => 'カスタム投稿名',
    'taxonomy' => $taxonomy_name,
    'term' => $term_var,
);
	$myQuery->query($param);
?>
<?php if($myQuery->have_posts()): ?>
<ul>
<?php while($myQuery->have_posts()) : $myQuery->the_post(); ?>
<!-- ここからループ -->
<li>〜〜〜〜〜</li>
<!-- ここまでループ -->
<?php endwhile; ?>
</ul>
<?php endif; ?>
<?php wp_reset_postdata(); ?>

作成するファイルは1つでOKで、通常投稿の「カテゴリページ」のように、ターム毎の記事一覧を出力してくれます。

タームをリンク付きリストで出力

タームを li のリストで出力し、サイドバーなど一覧で出力したい時に使います。

PHP

<ul>
<?php // タームの一覧を表示
$catlist = wp_list_categories(array(
'taxonomy' => 'タクソノミー名',
'title_li' => '',
'show_count' => 1, // 1でタクソノミーの投稿数を表示
'echo' => 0 // 設定した値を返す
));
$catlist = preg_replace('/<\/a> (\([0-9]*\))/', ' <span>$1</span></a>', $catlist); // 投稿数をspanで囲う
$catlist = str_replace(array('(',')'), '', $catlist); // 投稿数の()を削除
echo $catlist; // ターム一覧を表示
?>
</ul>

taxonomy.php の中に記述すると、表示中のタームを取得して li タグに current のclassを付与して出力します。

指定したタームで記事一覧を出力

任意のページにタームを指定して記事一覧を出力する場合に使います。

PHP

<ul>
	<?php
		$custom_posts = get_posts(array(
			'post_type' => 'カスタム投稿タイプ',
			'posts_per_page' => 10, //表示する件数
			'tax_query' => array(
			array(
				'taxonomy' => 'タクソノミー名(英数字)',
				'field' => 'slug',
				'terms' => 'ターム名(英数字)'
				)
			)
		));
	global $post;
	if($custom_posts): foreach($custom_posts as $post): setup_postdata($post); ?>
<!-- ここにループの中身 -->
		<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<!-- ここにループの中身 -->
	<?php endforeach; wp_reset_postdata(); endif; ?>

</ul>

タームで条件分岐

CPT UIで設定できるカスタムタクソノミーを使って、タームで条件分岐するにはis_object_in_term を使います。

条件分岐の記述方法や設定については、以下の記事をご覧ください。

タームの分岐のイラスト カスタムタクソノミーとタームで条件分岐

カレント付きのターム一覧を出力

投稿ページで、タクソノミー一覧をリンク付きで表示します。

その時、表示されたタームで紐づくものにはliタグに「current」がclass名で付いた状態で出力されます。

PHP

<ul class="termCurrentList">
	<?php // get_terms を使ったターム一覧の表示
	$taxonomy = "conditions"; // タクソノミーのスラッグを指定
	$terms = get_terms($taxonomy,'hide_empty=0');
	if (is_array($terms)) {
		foreach($terms as $term):
		$cat_id = $term->term_id;
		$slug = $term->slug;
		$cat_title = $term->name;
		$cat_url = get_term_link($slug, $taxonomy);;
		echo "<li";
		if ( is_object_in_term( get_the_ID(), $taxonomy, $slug )) {
			echo ' class="current"';
		} 
		echo '><a href="'.$cat_url.'" title="'.$cat_title.'">'.$cat_title.'</a></li>';
		endforeach;
	}
	?>
</ul>