上記のコードが、何をしたいもので、archive-area.php のどこに記述されているか教えてもらえますか?
has_term は、記事が属する分類を判定するものなので、目的に対する用途自体が違う可能性もあります。
jim912さま
お返事をありがとうございます!
目的:
archive-area.phpにて、
タクソノミー「エリア」のターム「地域A」「地域B」「地域C」
ごとに一覧表示しているカスタム投稿記事を、
さらに
タクソノミー「サービス」のターム「サービスA」「サービスB」「サービスC」
で地域別にしたまま絞り込んで表示させたいと思っております。
表示方法は、タブボタンを使った表示の切り替えです。
サービスによっては存在しない地域があるので、
もしも該当記事があれば表示、とさせたくて
調べたところ、has_termを見つけました。
「地域A」に属する投稿があれば、
「地域A」「サービスA」両方に属した記事を表示、
とさせたいのでございます。
どうかご教授ください。
何卒よろしくお願いいたします。
Codex での has_term の説明を引用すると
現在の投稿(または指定された投稿)が指定されたタームを持っているかチェックします。
指定されたタームは、投稿に付けられたタームの ID、名前、スラッグに合うかチェックされます。 整数で指定されたタームは、投稿のタームの ID のみと比較されます。
タームが指定されない場合は、投稿が任意のタームを持つかチェックします。
となっており、機能として、「地域A」に属する投稿の有無を判定するのではなく、投稿が地域Aなどに属しているかを判定するものとなります。
ご希望のケースにおいて、エリアのタクソノミーが複数の投稿タイプに結びついていないのであれば、get_terms もしくは、get_term でタームを取得し、タームの count を参照することで、投稿の有無を判定可能です。
jim912さま
ご返信ありがとうございます!
get_termsを使って下記を書いたのですが、
「area_A」のタームを持った投稿がないのに
表示されてしまいます。。
なぜでしょうか??
<?php
$terms = get_terms("area");//ターム「エリア」を取得
foreach ( $terms as $term ) {
if ($term->slug == 'area_A'){
?>
<section class="block_bmgn">
<div class="row">
<div class="wrap">
<div class="col-md-24">
<h2 class="ttl_underline_brown"><span class="ttl_underline_brown_inner">タイトル</span></h2>
</div>
<?php
$args = array(
'post_type' => 'senior', // 投稿タイプを指定
'tax_query' => array(
'relation' => 'AND',
array(
'taxonomy' => 'area',
'field' => 'slug',
'terms' => 'area_A',
),
array(
'taxonomy' => 'senior_service',
'field' => 'slug',
'terms' => 'service_B',
),
),
); ?>
<?php $mypost = new WP_Query( $args ); ?><!-- クエリの指定 -->
<?php while ( $mypost->have_posts() ) : $mypost->the_post(); ?>
<!-- 内容 -->
<?php endwhile; ?>
<?php wp_reset_postdata(); ?>
</div>
</div>
</section>
<?php }
}; ?>
get_terms は、デフォルトで hide_empty が true となるため、area_A に属する投稿がなければ取得されません。
上記のコード以外の影響、もしくはなんらか属する投稿が存在するものと思われます。
jim912さま
ご返信ありがとうございます。
なるほど。
するともうひとつのservice_Bの
何かを拾っているのかもでございますね。。
違う書き方を調べてみます!