サポート » 使い方全般 » タクソノミーで子タームのみ表示

  • お世話になります。
    現在、
    「用途」というタクソノミーで、
    「工事」、「施設」「住宅」いうタームを作っているのですが
    この「工事」に子ターム「河川」「土木」をして
    selectボックスで表示させています。

    現在のコードです

    <select name="use">
              <option value="" selected>選択してください</option>
        <?php
        $taxonomy_name = 'use';
        $taxonomys = get_terms($taxonomy_name);
        if(!is_wp_error($taxonomys) && count($taxonomys)):
            foreach($taxonomys as $taxonomy):
                $tax_posts = get_posts(array('post_type' => get_post_type('construction'), 'taxonomy' => $taxonomy_name, 'term' => $taxonomy->slug ) );
                if($tax_posts):
        ?>
        <option value="<?php echo $taxonomy->slug; ?>"><?php echo $taxonomy->name; ?></option>
        <?php
                endif;
            endforeach;
        endif;
        ?>
        </select>

    現在の表示だと、

    ・工事
    ・河川
    ・土木
    ・施設
    ・住宅
    になっているのですが、

    「工事」という親タームを非表示にして

    ・河川
    ・土木
    ・施設
    ・住宅

    のように表示させたいです。

    ご教授願います。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • こんにちは。
    parent の値で判別できるかと思います。

    <?php
    // カスタム分類名
    $taxonomy = 'use';
    
    // カスタム分類のタームのリストを取得
    $terms = get_terms( $taxonomy );
    
    foreach ( $terms as $term ) {
        if( $term->parent != 0 ) {
            // 子タームの場合
        }
    }

    タームのオブジェクトのフィールド parent が親タームの ID を表します。それがゼロなら親がない、つまり階層の最上位のタームです。

    ( @andante0727 さんと被ってしまいました。失礼しました。)

    • この返信は2年、 11ヶ月前にgblsmが編集しました。

    こんにちは

    子タームのみではなく、子タームをもたない親ターム(「施設」、「住宅」)を含むということではないかしら?
    間違えていたら、ごめんない。

    この場合は、下記のような感じでしょうか。

    <?php
    // カスタム分類名
    $taxonomy = 'use';
    
    // カスタム分類のタームのリストを取得
    $terms = get_terms( $taxonomy );
    
    foreach ( $terms as $term ) {
    	$termchildren = get_term_children( $term->term_id, $taxonomy );
    	if ( count( $termchildren ) == 0) {
    		// 子タームをもたないタームの場合
    	}
    }
    • この返信は2年、 11ヶ月前にishitakaが編集しました。
    • この返信は2年、 11ヶ月前にishitakaが編集しました。

    ちゃんと読むとそうですね、@ishitaka さんの方法が正解のようです。失礼しました。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「タクソノミーで子タームのみ表示」には新たに返信することはできません。