ちょこっとだけタグリストを出したい時のショートコード

ワードプレス

特定のタクソノミーのタームだけ、アーカイブやシングルに出力したい時に。

例えば、

  • 求人情報のアーカイブ
  • タクソノミーが複数あり
  • タクソノミー「勤務エリア」だけ目立たせたい!

みたいなケース。

ソース

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"]' ); ?>

※ショートコードが動作しないよう[]を[]に変換しています。お試しの際は[]に書き戻してください。

実際の出力