サポート » 使い方全般 » has_termを使って条件分岐したい

  • お世話になります。

    <?php if (has_term( 'area_a', 'area' )): ?>
    	<!-- コンテンツarea_aの内容 -->
    <?php endif; ?>
    
    <?php if (has_term( 'area_b', 'area' )): ?>
    	<!-- コンテンツarea_bの内容 -->
    <?php endif; ?>
    
    <?php if (has_term( 'area_c', 'area' )): ?>
    	<!-- コンテンツarea_cの内容 -->
    <?php endif; ?>

    archive-area.phpにて、
    以上の内容で条件分岐したいのですが、
    なぜかarea_cのところは表示されるのですが、
    area_a、area_bは表示されません。

    試しにarea_aをarea_cに書き換えるとarea_aの内容の内容が表示されました。。
    なぜでしょうか??
    お分かりになる方、ご教授ください。
    何卒よろしくお願いいたします。

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • モデレーター jim912

    (@jim912)

    上記のコードが、何をしたいもので、archive-area.php のどこに記述されているか教えてもらえますか?

    has_term は、記事が属する分類を判定するものなので、目的に対する用途自体が違う可能性もあります。

    トピック投稿者 mitsu666

    (@mitsu666)

    jim912さま

    お返事をありがとうございます!

    目的:
    archive-area.phpにて、
    タクソノミー「エリア」のターム「地域A」「地域B」「地域C」
    ごとに一覧表示しているカスタム投稿記事を、
    さらに
    タクソノミー「サービス」のターム「サービスA」「サービスB」「サービスC」
    で地域別にしたまま絞り込んで表示させたいと思っております。

    表示方法は、タブボタンを使った表示の切り替えです。
    サービスによっては存在しない地域があるので、
    もしも該当記事があれば表示、とさせたくて
    調べたところ、has_termを見つけました。

    「地域A」に属する投稿があれば、
    「地域A」「サービスA」両方に属した記事を表示、
    とさせたいのでございます。

    どうかご教授ください。
    何卒よろしくお願いいたします。

    モデレーター jim912

    (@jim912)

    Codex での has_term の説明を引用すると

    現在の投稿(または指定された投稿)が指定されたタームを持っているかチェックします。

    指定されたタームは、投稿に付けられたタームの ID、名前、スラッグに合うかチェックされます。 整数で指定されたタームは、投稿のタームの ID のみと比較されます。

    タームが指定されない場合は、投稿が任意のタームを持つかチェックします。

    となっており、機能として、「地域A」に属する投稿の有無を判定するのではなく、投稿が地域Aなどに属しているかを判定するものとなります。

    ご希望のケースにおいて、エリアのタクソノミーが複数の投稿タイプに結びついていないのであれば、get_terms もしくは、get_term でタームを取得し、タームの count を参照することで、投稿の有無を判定可能です。

    トピック投稿者 mitsu666

    (@mitsu666)

    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 }
    	}; ?>
    モデレーター jim912

    (@jim912)

    get_terms は、デフォルトで hide_empty が true となるため、area_A に属する投稿がなければ取得されません。
    上記のコード以外の影響、もしくはなんらか属する投稿が存在するものと思われます。

    トピック投稿者 mitsu666

    (@mitsu666)

    jim912さま

    ご返信ありがとうございます。
    なるほど。
    するともうひとつのservice_Bの
    何かを拾っているのかもでございますね。。

    違う書き方を調べてみます!

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • トピック「has_termを使って条件分岐したい」には新たに返信することはできません。