• wordpress初心者です。
    4階層あるパンくずリストを作るために、子カテゴリーの有無を判別させて条件分岐をさせたいのですが、判別がうまくできません。
    (パーマリンクをプラグインで書き換えているため、パンくずリストをプラグインで作ることができません)
    アドバイスいただけないでしょうか。よろしくお願いいたします。

    以下、ソースです。
    <?php
    $term_children = get_term_children($term_id, $taxonomy_name);
    if (empty($term_children)){ ?>
    HTMLが入ります
    <?php }else{ ?>
    HTMLが入ります
    <?php } ?>

9件の返信を表示中 - 1 - 9件目 (全9件中)
  • get_term_childrenの返り値が配列だからです。
    配列から値を取り出してあげれば大丈夫だと思います。

    if (empty($term_children))
    この部分を
    if (empty($term_children[0]))
    こう変更してあげれば判別できるようになるはずです。

    トピック投稿者 hina101010

    (@hina101010)

    ご回答ありがとうございます!
    if (empty($term_children[0]))
    としてみましたが、該当部分から下が真っ白になってしまいました。
    何が問題かお分かりになりますか。
    よろしくお願いいたします。

    • この返信は7年、 10ヶ月前にhina101010が編集しました。

    すみませんが情報が少なすぎます。
    現在の情報ではget_term_childrenに関する部分しかお答えできません。

    $term_idと$taxonomy_nameはそもそも正しく取得できているのでしょうか?
    このソースを記述しているのはどのファイルですか?
    また、パンくずリストを作るためにということですが、この記述部分はカテゴリーアーカイブ用のものですか?
    それとも投稿ページ用のものですか?
    パンくずリストが作れればまったく別のアプローチでも構わないのでしょうか?

    get_term_children でデータがなければ、WP_Error を返すとあります。
    ので、
    if($term_children)
    ではダメでしょうか。

    あるいは
    if ($term_children->count == 0 && is_wp_error($term_children))
    あたりかなぁとか思います。

    もし、kimipoohさんのおっしゃってるようにWP_Errorが返ってきているということであれば、
    $taxonomy_nameが正しく取得できていない(存在しないタクソノミー名が指定されている)ということですので、
    $taxonomy_nameの取得の部分を見直してみてください。
    カスタム投稿等ではなく、シンプルな投稿ページのカテゴリーであれば、’category’を指定すれば大丈夫です。
    それでもうまくいかないなら、$term_idの取得部分も見直してください。

    確かに、根本的に $term_id と $taxonomy_name に意図したデータが入っているかのチェックが先ですね。

    var_dump($term_id);
    var_dump($taxonomy_name);

    などして、意図したデータが入っているか確認してみるとよいと思います。
    お示しのソースコードだけでは、それらの変数に値が入っていないので動作しませんしね。
    最低でも

    $cats = get_the_category();
    $cat = $cats[0];
    if($cat){
        $term_id = $cat->term_id;
        $taxonomy_name = $cat->taxonomy;
        $term_children = get_term_children($term_id, $taxonomy_name);
        if($term_children){ // 子カテゴリーが1つ以上あるとき
    HTMLが入ります
        }else{ // 子カテゴリーがないとき
    HTMLが入ります
        }
    }

    あたりのコードはいるんじゃないかな〜とは思いますね。

    トピック投稿者 hina101010

    (@hina101010)

    Akane様、kimiphooh様、ご教示ありがとうございます。

    情報が不十分で申し訳ありません。
    投稿ページのパンくずリストです。

    Akane様ご指摘の
    > $term_idと$taxonomy_nameはそもそも正しく取得できているのでしょうか?
    > このソースを記述しているのはどのファイルですか?
    ですが、kimiphooh様にお教えいただいたコードで試したところ「NULL」となってしまって、ご指摘通りそもそも定義ができていませんでした。

    kimiphooh様が示してくださったコードで定義をしたら、うまく判別することができました。
    何とか実装できそうです。
    誠に誠にありがとうございました。

    うまくいってなによりでした。
    ちなみにやっていることは、
    1. 現在ページのカテゴリーを取得
    2. 取得したカテゴリーの最初の1つを取り出す
    3. 取り出したカテゴリーに子カテゴリがあるかドウかチェック

    です。のでページにカテゴリーが複数設定されていて、そのうち1つでも子カテゴリーがあるなら〜という条件分岐であるなら、
    $cat = $cats[0]; とせずに

    $cats = get_the_category();
    
    $cat_child_flag = false;
    if($cats){
      foreach($cats as $cat){
        if($cat){
          $term_id = $cat->term_id;
          $taxonomy_name = $cat->taxonomy;
          $term_children = get_term_children($term_id, $taxonomy_name);
          if($term_children){
             $cat_child_flag = true;
             break;
          }
        }
      }
    
      if($cat_child_flag){ // いずれかのカテゴリーに、子カテゴリーがある場合
         HTMLが入ります 
      }else{ // すべてのカテゴリーに子カテゴリーがないとき
         HTMLが入ります
      }
    }

    のような感じになると思います。

    トピック投稿者 hina101010

    (@hina101010)

    丁寧な説明までありがとうございます!!
    とても勉強になります。

    カテゴリーは親1つ子1つなので、はじめに教えていただいた方が近いのですが、2つ目も勉強になります。
    ご親切にお教えいただいて本当にありがとうございました。
    とても助かりました。

9件の返信を表示中 - 1 - 9件目 (全9件中)
  • トピック「条件分岐のため子カテゴリーの有無を判別させたい」には新たに返信することはできません。