サポート » 使い方全般 » wp_get_post_termsを使用した際のタームの除外方法

  • 解決済 sudadada

    (@sudadada)


    【やりたいこと】

    カスタム投稿タイプ「イベント情報(event)」にカスタムタクソノミー「エリア(area)」というものを使用しております。

    「エリア」のタームは以下のようになっています。

    エリア
    ┣県北
    ┃┣○○市
    ┃┗××村
    ┣県南
    ┃┣□□市
    ┃┗△△村
    ・・・

    イベント情報をアーカイブ等で一覧表示させる際にエリアも一緒に表示させたいと思っています。

    例えば”○○市”で行われるイベントであればタームは”県北”と”○○市”を選択しますが、一覧で表示されるのは”○○市”だけを表示されるようにしたいです。
    ※親となる地域名を除外して子の市町村名だけ表示させるイメージです。

    ---------------

    <ul>
    <?php $lists = wp_get_post_terms($post->ID,'area'); ?>
    <?php foreach($lists as $list): ?>
    <li><?php echo esc_html($list->name); ?></li>
    <?php endforeach; ?>
    </ul>

    ベースとして上のコードでエリアを表示させるところまでは順調に進んでいたのですが、ここから特定のタームを除外させる方法がわからず躓いてしまいました。

    https://ja.forums.wordpress.org/topic/21967?replies=11

    こちらのフォーラム等を参考にしてああでもないこうでもないやってみたのですが『exclude』をどこにどう使うのが正しいのか、そもそもこの場合『exclude』を使うのが正しいのかどうなのか考えてしまいどんどん泥沼にハマっている気がします。

    どうかご協力の程、よろしくお願い致します。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • wp_get_post_terms は exclude が使えません。そのため少し面倒ですが「他のタームの親なら表示しない」というコードを試してみました。どうでしょうか。

    <ul>
    <?php $myterms = wp_get_post_terms( $post->ID, 'area' );
      // 親の term_id を取り出す
      $parents = array();
      foreach( $myterms as $myterm ) {
        $parents[$myterm->parent] = TRUE;
      }
      foreach( $myterms as $myterm ):
        // term_id が親として出てこなければ表示する
        if ( ! isset( $parents[$myterm->term_id] ) ): ?>
    <li><?php echo esc_html( $myterm->name ); ?></li>
    <?php endif; endforeach; ?>
    </ul>

    トピック投稿者 sudadada

    (@sudadada)

    >>gblsmさん

    書き込みありがとうございます。

    >wp_get_post_terms は exclude が使えません。

    通りでいくら調べても出てこないわけですね・・・

    頂いたコードをさっそく試してみました。

    私が望んでいた通りの表示をされたので大満足です。

    どうも、ご対応の程ありがとうございました。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • トピック「wp_get_post_termsを使用した際のタームの除外方法」には新たに返信することはできません。