特定のタクソノミーのタームだけ、アーカイブやシングルに出力したい時に。
例えば、
- 求人情報のアーカイブ
- タクソノミーが複数あり
- タクソノミー「勤務エリア」だけ目立たせたい!
みたいなケース。
ソース
function post_terms( $atts ){
if( !empty( $atts['tax'] ) ){
$tax = $atts['tax'];
}else{
$tax = 'category';
}
if( !empty( $atts['wrapper'] ) ){
$wrapper = $atts['wrapper'];
}else{
$wrapper = 'span';
}
if( !empty( $atts['class'] ) ){
$class = ' ' . $atts['class'];
}else{
$class = '';
}
$output = '';
$output .= '<' . $wrapper . ' class="taglist-post-terms taglist-post-terms-' . $tax . $class . '">';
$terms = get_the_terms( '', $atts['tax'] );
if( !empty( $terms ) ){
foreach ( $terms as $term ){
$output .= '<span class="taglist-tax taglist-tax-' . $tax . '">';
$parent = $term->parent;
if( !empty( $parent ) ){
$parent_class = ' parent-term-id-' . $parent;
}else{
$parent_class = ' parent-term-none';
}
if( !empty( $atts['link'] ) && $atts['link'] == 'false' ){
$link_begin = '';
$link_end = '';
}else{
$link_begin = '<a href="' . get_term_link( $term ) . '" class="taglist-term taglist-term-' . esc_html( $term->slug ) . ' term-id-' . $term->term_id . $parent_class . '"' . '>';
$link_end = '</a>';
}
$output .= $link_begin . $term->name . $link_end;
$output .= '</span>';
}
$output .= '</' . $wrapper . '>';
}
return $output;
}
add_shortcode( 'post_terms', 'post_terms' );
cssクラスは適当に変更してください。
タームの階層構造には対応していませんが、一応親子にそれぞれclassは付与しています。※孫も子扱い
引数
- tax=”post_tag”
出力したいタクソノミー(省略時はカテゴリー) - link=”false”
パーマリンクを付ける・付けない(省略時はリンクあり) - wrapper=”p”
ラッパータグ(省略時はspan) - class=”taglist”
よく使うclassがあればソレを。
用例
デフォルトのテンプレートタグに近しいものがあったと思うけど、使用中のテーマで都合がいい形にしたい場合に。
で、いちいちタクソノミー情報を取得して、タームをforeachで拾って、、、とかが面倒なときに。
<?php echo do_shortcode( '[post_terms tax="post_tag" link="false" wrapper="p" class="taglist"]' ); ?>
※ショートコードが動作しないよう[]を[]に変換しています。お試しの際は[]に書き戻してください。
実際の出力
ショートコードタクソノミータームPHPカスタマイズ関数