サポート » その他 » taxonomy.phpで特定のタームの時にそれに関するタームのみのリストを作成したいです。

  • 解決済 greon999

    (@greon999)


    taxonomy.phpで特定のタームの時にそれに関するタームのみのリストを作成したいです。

    ■条件
    条件としては以下です。

    タクソノミー名:area
    ターム名(スラッグ):
    北海道
     札幌
     小樽
    神奈川
     横浜
     川崎
    愛知
     名古屋
     岡崎
    ・・・
    (都道府県が親、市区町村が子の、親子関係のタームです)

    ■目的
    上記の条件において、北海道or札幌or小樽のアーカイブページ(taxonomy.phpで作成)が表示されている時には

    北海道
     札幌
     小樽

    というリストを、
    神奈川or横浜or川崎のアーカイブページが表示されている時には

    神奈川
     横浜
     川崎

    というリストを表示したいのです。
    作業効率の理由から、北海道or札幌or小樽をタクソノミーarea01に、神奈川or横浜or川崎をタクソノミーarea02に、という風に、タクソノミーを分けるのは無しです。

    ★★★1つのタクソノミーでありながら、スラッグで判別してそのスラッグに関するリストのみ表示させたい★★★

    というのが目的になります。

    ■現状
    現状のプログラムは以下です。

    <?php
    // パラメータ
    $args = array(
    ‘orderby’ => ‘term_group’,
    // 親タームのみ取得
    ‘parent’ => 0,
    // 投稿記事がないタームも取得
    ‘hide_empty’ => false,
    ‘tax_query’ => array(
    array(
    ‘taxonomy’ => ‘area’, // カスタムタクソノミー名
    ‘field’ => ‘slug’, // ターム名を term_id,slug,name のどれで指定するか
    ‘terms’ => ‘北海道’ // タクソノミーに属するターム名
    )
    )
    );

    // カスタムタクソノミー名
    $taxonomy01 = ‘area’;
    // カスタム分類のタームのリストを取得
    $terms01 = get_terms( $taxonomy01 , $args );
    if ( count( $terms01 ) != 0 ) {
    echo ‘<form><select class=”postform” name=”sortside01″>’.”\n”;
    // 親タームのリスト $terms01 を $term01 に格納してループ
    foreach ( $terms01 as $term01 ) {
    // 親タームのURLを取得
    $term01 = sanitize_term( $term01, $taxonomy01 );
    $term01_link = get_term_link( $term01, $taxonomy01 );
    if ( is_wp_error( $term01_link ) ) {
    continue;
    }
    // 親タームのURLと名称を出力
    echo ‘<option class=”level-0″ value=”‘ . esc_url( $term01_link ) . ‘”>’ . $term01->name. ‘</option>’.”\n”;

    // 子タームのIDのリストを取得
    $term01_children = get_term_children( $term01->term_id, $taxonomy01 );
    if( count( $term01_children ) != 0 ) {
    echo ”;
    // 子タームのIDのリスト $term01_children を $term01_idに格納してループ
    foreach ( $term01_children as $term01_id ) {
    // 子タームのIDを元に子タームの情報を取得
    $term01_child = get_term_by( ‘id’, $term01_id, $taxonomy01 );
    // 子タームのURLを取得
    $term01_child = sanitize_term( $term01_child, $taxonomy01 );
    $term01_child_link = get_term_link( $term01_child, $taxonomy01 );
    if ( is_wp_error( $term01_child_link ) ) {
    continue;
    }
    // 子タームのURLと名称を出力
    echo ‘<option class=”level-1″ value=”‘ . esc_url( $term01_child_link ) . ‘”>   ‘ . $term01_child->name . ‘</option>’.”\n”;
    }
    echo ”;
    }
    }
    echo ‘</select><input type=”button” value=”表示” onClick=”top.location.href=sortside01.value” /></form>’;
    }
    ?>

    ■症状
    ‘terms’ => ‘北海道’ // タクソノミーに属するターム名 (12行目くらい)
    でスラッグを指定すればそのスラッグに関わる親子のみのリストが表示されると考えたのですが、

    北海道
     札幌
     小樽
    神奈川
     横浜
     川崎
    愛知
     名古屋
     岡崎
    ・・・

    と全てが表示されてしまいます。

    $taxonomy01 = ‘area’; (18行目くらい)
    と指定してあるから、そのタクソノミーのターム全部が表示されるのが当たり前と思われるかもしれませんが、これが無いとリストそのものが表示されません。

    ■懇願
    お知恵をいただけると幸いです。
    何卒よろしくお願いいたします。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • こんにちは

    get_terms() でタームをスラッグで指定する場合は、slug パラメータとなります。
    http://wpdocs.osdn.jp/関数リファレンス/get_terms

    $args = array(
    
    	(省略)
    
    	'tax_query' => array( array(
    		'taxonomy' => 'area',
    		'field' => 'slug',
    		'terms' => '北海道'
    	) )
    );

    $args = array(
    
    	(省略)
    
    	'slug ' => '北海道',
    );

    ターム ID で指定する場合は、include パラメータあたりでしょうか。

    $term = get_queried_object();
    $term_id = $term->parent == 0 ? $term->term_id : $term->parent;
    
    $args = array(
    
    	(省略)
    
    	'include' => $term_id,
    );
    • この返信は1 年、 3 ヶ月前に  ishitaka さんが編集しました。理由: 誤字
    $args = array(
    	(省略)
    	'slug ' => '北海道',
    );

    で出来ました!!
    目的が達成できたので、タームIDの方は試してないですが、本当にありがとうございます!

    答えを知ってしまえば、たったこれだけのことかと、自分の知識不足を恥じますが、ネットでいろいろ調べてどうしてもわからなかったので、本当に助かりました。

    解決しました。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • トピック「taxonomy.phpで特定のタームの時にそれに関するタームのみのリストを作成したいです。」には新たに返信することはできません。