[WordPress] タームアーカイブで子タームのリストを出す記述のメモ

最終更新: 2022/01/05/公開: 2022/01/05
この記事は 2022年1月5日 に投稿されました。
内容が古いかもしれません。ご注意ください。
※最後に更新されたのは 2022年1月5日 です。

この記述でできること

子タームがあって、かつ記事数が0ではない場合に子タームのリンク付きリストを自動出力できます。
ソートはid順です。順番の任意変更する機能はありません。
多分…子ターム一覧を取得した配列をソートしないといけないですが、そこまでやってません。

タクソノミーとタームは命令が色々あってめんどくせ〜〜〜〜な〜〜

<?php
  //タームの情報を取得
  $queried_object = get_queried_object(); //現在の画面の投稿オブジェクト
  $term_parent = $queried_object->parent; //親のID
  $current_term_id = $queried_object->term_id; //表示中のタームのID
  $current_term_taxonomy = $queried_object->taxonomy; //表示中のタームが属するタクソノミースラッグ

  if( $term_parent ) {
    //親IDの有無で子の取得方法を変更 自分のを使うか親を使うか
    $child_terms = get_term_children( $term_parent, $current_term_taxonomy );
    //全部の一覧であるかでクラス名分岐
    $parent_current_property = '';
    //全部の一覧へのリンク取得
    $parent_archive_url = get_term_link( $term_parent );
  } else {
    $child_terms = get_term_children( $current_term_id, $current_term_taxonomy );
    $parent_current_property = ' class="current"';
    $parent_archive_url = get_term_link( $current_term_id );
  }

  //小ターム全体の数を数えてナビの表示分岐へ利用
  $children_number;
  foreach ( $child_terms as $child_term ) {
    $count_term = get_term_by( 'id', $child_term, $current_term_taxonomy );
    $children_number = $children_number + $count_term->count;
  }

  //小タームが存在し、記事が0件でなければサブナビを表示
  if( !empty( $child_terms && $children_number !== 0 ) ){
    echo '<ul>';
    echo '<li><a href="' . esc_url($parent_archive_url) . '"' . $parent_current_property . '>すべて</a></li>';
    foreach ( $child_terms as $child_term ) {
      $term = get_term_by( 'id', $child_term, $current_term_taxonomy );

      if( $current_term_id === $child_term ){
        $child_current_property = ' class="current"';
      } else {
        $child_current_property = '';
      }
      if( $term->count !== 0 ){ //記事数($term->count)が0じゃない場合だけ出す
        echo '<li><a href="' . get_term_link( $child_term, $current_term_taxonomy ) . '"' . $child_current_property . '>' . $term->name . '</a></li>';
      }
    }
    echo '</ul>';
  }
?>

参考

大枠の方法の参考

子タームのみ出力する方法(WordPress)

新潟ホームページ制作【マザーシップ】フリーランス(SOHO)

WordPress:タームのアーカイブページで、タイトルやスラッグなどの各種情報を取得・表示する方法

NxWorld


いずれもコピペだけでは不安なので、各関数についてリファレンスを参照の上var_dumpして確認しながら作成。

各関数について(未だにCodeXで申し訳ないです)

関数リファレンス/get term children

WordPress Codex 日本語版

関数リファレンス/get queried object

WordPress Codex 日本語版

関数リファレンス/get term by

WordPress Codex 日本語版

関数リファレンス/get term link

WordPress Codex 日本語版