サポート » 使い方全般 » 親ターム名と子ターム名を表示する方法

  • 解決済 mitsu666

    (@mitsu666)


    いつもお世話になっております。
    下記のソースにて、現在親ターム名一覧を表示しております。

    <?php
    $taxonomy_name = 'chukai_cat';
    $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(), 'taxonomy' => $taxonomy_name, 'term' => $taxonomy->slug ) );
            if($tax_posts):
    ?>
    <option value="<?php echo $taxonomy->slug; ?>"><?php echo $taxonomy->name; ?></option>
    <?php
            endif;
        endforeach;
    endif;
    ?>

    この親タームにぶら下がる子ターム名も表示したいと思い、
    https://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/get_terms
    こちらを参考にして

    <?php
    $taxonomy_name = 'chukai_cat';
    $taxonomys = array(
        'parent'=> '0',
    );
    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(), 'taxonomy' => $taxonomy_name, 'term' => $taxonomy->slug ) );
            if($tax_posts):
    ?>
    <option value="<?php echo $taxonomy->slug; ?>"><?php echo $taxonomy->name; ?></option>
    <?php
            endif;
        endforeach;
    endif;
    ?>

    このように書いてみましたが、真っ白になりうまくいきませんでした。
    どうすれば子タームも出すことができるでしょうか?

    また、このタームの並び順を任意で変えられたりするものでしょうか?
    ご存知の方、お手数ですがご教授いただければ幸いです。
    どうかよろしくお願いいたします。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • 私のサイトで似たようなことを試してみたら、最初の例で既に子タームまで全部出ているように見えます。

    最初の例を参考に以下のPHPファイルを作って

    <?php
    require( dirname( __FILE__ ) . './../wp-blog-header.php' );
    $taxonomy_name = 'utility-tax';
    $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(), 'taxonomy' => $taxonomy_name, 'term' => $taxonomy->slug ) );
            if($tax_posts):
    ?>
    <option value="<?php echo $taxonomy->slug; ?>"><?php echo $taxonomy->name; ?></option>
    <?php
            endif;
        endforeach;
    endif;
    ?>

    以下のURLに置きました。

    http://meta-scheme.jp/wp/test-php/

    上のURLの表示内容と、下のURLの表示内容にある「記事案内 便宜分類別」っていうドロップダウンをよくよく見比べてみると、なんか、子タームまで全部出てる感じですけど。既に最初のコードの段階で。

    http://meta-scheme.jp/

    タームの並び順については、以下のリファレンスを見る限りでは

    Home

    orderby引数とorder引数で指定できそうな気はしますが、私自身はまだ試していません。

    ただ、以前私がwp_list_categoriesやwp_dropdown_categoriesを使った時、少なくともCategory Order and Taxonomy Terms Orderプラグインを使ってる環境では、orderby引数とorder引数が上手く効いてないように見えたので、もしそのプラグインを使っている環境だと、同じ問題が起こる可能性はあると思いました。

    と、上の様に思ってましたが、Category Order and Taxonomy Terms Orderプラグインを使ってる私の環境でも、orderbyがNAME、orderがDESCは、あるていど効いてるみたいでした。

    以下のPHPファイルを書いて

    <?php
    require( dirname( __FILE__ ) . './../wp-blog-header.php' );
    echo 'test orderby<br/><br/>';
    $taxonomy_name = 'utility-tax';
    $taxonomys = get_terms($taxonomy_name, array('orderby'=>'name','order'=>'DESC'));
    if(!is_wp_error($taxonomys) && count($taxonomys)):
        foreach($taxonomys as $taxonomy):
            $tax_posts = get_posts(array('post_type' => get_post_type(), 'taxonomy' => $taxonomy_name, 'term' => $taxonomy->slug ) );
            if($tax_posts):
    ?>
    <option value="<?php echo $taxonomy->slug; ?>"><?php echo $taxonomy->name; ?></option>
    <?php
            endif;
        endforeach;
    endif;
    ?>

    以下においたら、先に書いた例と違う並びに変わりました。

    http://meta-scheme.jp/wp/test-php/index2.php

    とはいえ、この表示結果、名称降順になってるとは考えにくいので、やっぱ、狙ったとおりには並ばないのかも(Category Order and Taxonomy Terms Orderプラグインの入ってない環境が私のサイトにはないのでそっちの環境での動きは試せてないです)。

    トピック投稿者 mitsu666

    (@mitsu666)

    tg29359さま

    さっそくのご返信をありがとうございます!

    >私のサイトで似たようなことを試してみたら、最初の例で既に子タームまで全部出ているよう>に見えます。
    なんと。。
    おっしゃっていただきました内容を咀嚼し、
    テストをしたところおっしゃるとおり、子タームが反映されておりました。
    うっかりミスだったようです。
    すみません。

    配列の件ですが、書いていただきましたソースを参考に、

    <?php
    $taxonomy_name = 'chukai_cat';
    $taxonomys = get_terms($taxonomy_name, array('orderby'=>'slug'));
    if(!is_wp_error($taxonomys) && count($taxonomys)):
        foreach($taxonomys as $taxonomy):
            $tax_posts = get_posts(array('post_type' => get_post_type(), 'taxonomy' => $taxonomy_name, 'term' => $taxonomy->slug ) );
            if($tax_posts):
    ?>
    <option value="<?php echo $taxonomy->slug; ?>"><?php echo $taxonomy->name; ?></option>
    <?php
            endif;
        endforeach;
    endif;
    ?>

    以上のようにしまして、
    アナログではありますが、スラッグ名に任意の順番になるように
    abcd…をつけたところ、
    希望通りの並び順になりました!
    ご丁寧にURLまで作成、ご教授いただきありがとうございます!
    ご対応感謝いたします。
    実現できてよかったです。
    ありがとうございます!

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