投稿タイプ内に、「タームに紐づく投稿があるか無いか」を判定したいケースがありました。
- 全てのタクソノミをチェックしたい
- タクソノミ、タームがあっても、紐づいていなかったら「無い」としたい
なんかテンプレートタグがあるだろう、と思いましたが無いみたい。
ので関数を定義してみました。
ソース
/* ---------- タームに紐づく投稿の存在判定 ---------- */
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 'タームに紐づいた投稿はありません';
}
投稿タイプごとのトップ、タクソノミー、シングルあたりが使いどころでしょうか。
どこに書いてもおかしな動作はしないと思いますが。