タームに紐づく投稿があるか無いか

ワードプレス関数ファイルPHPカスタム投稿タイプタクソノミータームテンプレートタグ条件分岐関数

投稿タイプ内に、「タームに紐づく投稿があるか無いか」を判定したいケースがありました。

  • 全てのタクソノミをチェックしたい
  • タクソノミ、タームがあっても、紐づいていなかったら「無い」としたい

なんかテンプレートタグがあるだろう、と思いましたが無いみたい。

 

ので関数を定義してみました。

ソース

/* ---------- タームに紐づく投稿の存在判定 ---------- */
if( !function_exists( 'posts_have_term' ) ) {
	function posts_have_term(){
		$post_type = get_post_type_object( get_post_type() )->name;
		$taxonomies = get_taxonomies( array( 'object_type' => array( $post_type ) ) );
		$term_count = 0;
		if( !empty( $taxonomies ) ){
			foreach( $taxonomies as $tax ){
				$args = array(
					'taxonomy'		=> $tax,
					'hide_empty'	=> 1
				);
				$terms = get_terms( $args );
				if( !empty( $terms ) ){
					$term_count++;
				}
			}
		}
		if( $term_count === 0 ){
			return false;
		}else{
			return true;
		}
	}
}

使用例

真偽の条件分岐です。

if( posts_have_term() ){
	echo 'タームに紐づいた投稿が1以上あります。';
}else{
	echo 'タームに紐づいた投稿はありません';
}

投稿タイプごとのトップ、タクソノミー、シングルあたりが使いどころでしょうか。

どこに書いてもおかしな動作はしないと思いますが。