記事の分類で「カテゴリー」と「タグ」が用意されていますが、「カスタムタクソノミー」という方法で、別分類を追加することができます。
また、この「カスタムタクソノミー」を使うことで、カスタム投稿にもタグ・カテゴリーを設定することが可能で、それを出力する時の関数です。
目次
ターム名の出力
カスタムタクソノミーで指定したターム名を、文字列で出力します。
<?php single_term_title(); ?>
ループの中でタクソノミーを指定してターム名を出力
ループの中でカスタムタクソノミーを指定して、タイム名を文字列で出力する場合は以下のように記述します。
<?php
if ($terms = get_the_terms($post->ID, 'library')) {
foreach ( $terms as $term ) {
echo ('<span>') ;
echo esc_html($term->name) ;
echo ('</span>') ;
}
}
?>
タームの説明の出力
カスタムタクソノミーで指定したタームの「説明」を出力します。
<?php echo term_description(); ?>
その記事のタームをリンク付きで出力
その記事のタクソノミーのタームを、a
タグのリンクで出力します。
<?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
$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
のリストで出力し、サイドバーなど一覧で出力したい時に使います。
<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を付与して出力します。
指定したタームで記事一覧を出力
任意のページにタームを指定して記事一覧を出力する場合に使います。
<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名で付いた状態で出力されます。
<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>