質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.33%

  • PHP

    21413questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • WordPress

    7704questions

    WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

WordPressのカスタム投稿で親カテゴリとサブカテゴリのリストを表示させたい

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 1,265

yukabyo

score 119

WordPressのカスタム投稿の
アーカイブページと、タクソノミーページにて、
親カテゴリ(ターム)とサブカテゴリをphpで一覧表示させたいです。

最終的に出力させたいのは、以下のような形です。

<div class="works_cat">
   <ul class="menulist clearfix" id="works-menu">
      <li class="menu">
         <div class="button">
            <a href="">
               <dl>
                  <dt>親カテゴリ名1のラベル</dt>
                  <dd>親カテゴリ名1のスラッグ</dd>
               </dl>
            </a>
         </div>
         <ul>
            <li><a href="">親カテゴリ名1のサブカテゴリ1</a></li>
            <li><a href="">親カテゴリ名1のサブカテゴリ2</a></li>
         </ul>
      </li>
      <li class="menu">
         <div class="button">
            <a href="">
               <dl>
                  <dt>親カテゴリ名2のラベル</dt>
                  <dd>親カテゴリ名2のスラッグ</dd>
               </dl>
            </a>
         </div>
         <ul>
            <li><a href="">親カテゴリ名2のサブカテゴリ1</a></li>
            <li><a href="">親カテゴリ名2のサブカテゴリ2</a></li>
         </ul>
      </li>
      <li class="menu">
         <div class="button">
            <a href="">
               <dl>
                  <dt>親カテゴリ名3のラベル</dt>
                  <dd>親カテゴリ名3のスラッグ</dd>
               </dl>
            </a>
         </div>
         <ul>
            <li><a href="">親カテゴリ名3のサブカテゴリ1</a></li>
            <li><a href="">親カテゴリ名3のサブカテゴリ2</a></li>
         </ul>
      </li>
   </ul>
</div>

今回以下のように途中までやってみましたがうまくいかず、
親カテゴリとサブカテゴリの出力の仕方がわからず躓いています。
わかる方いましたら教えていただけないでしょうか。
よろしくお願いいたします。

<div class="works_cat">
   <ul class="menulist clearfix" id="works-menu">
      <?php
         $args = array(
            'hide_empty' => 0, //記事の無いカテゴリも表示
         );
         $taxonomy_name = 'works-cat';
         $taxonomys = get_terms($taxonomy_name,$args);
         if(!is_wp_error($taxonomys) && count($taxonomys)):
         foreach($taxonomys as $taxonomy):
         $url = get_term_link($taxonomy->slug, $taxonomy_name);
      ?>
      <li class="menu">
         <div class="button">
            <a href="<?php echo $url; ?>">
               <dl>
                  <dt><?php echo esc_html($taxonomy->name); ?></dt>
                  <dd><?php echo esc_html($taxonomy->slug); ?></dd>
               </dl>
            </a>
         </div>
         <ul>
            <li><a href="">サブカテゴリ名</a></li>
            <li><a href="">サブカテゴリ名</a></li>
         </ul>
      </li>
      <?php endforeach; endif; ?>
   </ul>
</div>
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

check解決した方法

+2

<div class="works_cat">
<?php
// カスタム分類名
$taxonomy = 'works-cat';

// パラメータ
$args = array(
    // 親タームのみ取得
    'parent' => 0,

    // 子タームの投稿数を親タームに含める
    'pad_counts' => true,

    'orderby' => 'term_order',

    // 投稿記事がないタームも取得
    'hide_empty' => false
);

// カスタム分類のタームのリストを取得
$terms = get_terms( $taxonomy , $args );

if ( count( $terms ) != 0 ) {
    echo '<ul class="menulist clearfix" id="works-menu">';

    // 親タームのリスト $terms$term に格納してループ
    foreach ( $terms as $term ) {

        // 親タームのURLを取得
        $term = sanitize_term( $term, $taxonomy );
        $term_link = get_term_link( $term, $taxonomy );
        if ( is_wp_error( $term_link ) ) {
            continue;
        }

        // 親タームのURLと名称とカウントを出力
        echo '<li class="menu"><div class="button"><a href="javascript:void(0)">
               <dl>
                  <dt>' . $term->name . '</dt>
                  <dd>' . $term->slug . '</dd>
               </dl></a></div>';

        // 子タームのIDのリストを取得
        $term_children = get_term_children( $term->term_id, $taxonomy );

        if( count( $term_children ) != 0 ) {
            echo '<ul>';
            // 子タームのIDのリスト $term_children を $term_idに格納してループ
            foreach ( $term_children as $term_id ) {

                // 子タームのIDを元に子タームの情報を取得
                $term_child = get_term_by( 'id', $term_id, $taxonomy );

                // 子タームのURLを取得
                $term_child = sanitize_term( $term_child, $taxonomy );
                $term_child_link = get_term_link( $term_child, $taxonomy );
                if ( is_wp_error( $term_child_link ) ) {
                    continue;
                }

                // 子タームのURLと名称とカウントを出力
                echo '<li><a href="' . esc_url( $term_child_link ) . '">' . $term_child->name . '</a></li>';
            }
            echo '</ul></li>';
        }
    }

    echo '</ul>';
}
?>
</div>

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

この辺の記事を応用できませんか?

【WordPressでwp_list_categoriesを使わずにカスタムタクソノミー (カスタム分類) のターム一覧を表示する – WebCake】
http://webcake.no003.info/webdesign/get-terms.html

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/03/15 11:24

    ご回答ありがとうございます!
    奇遇ながら私もちょうどその記事の内容を読んでおり、実現することができましたm(__)m

    キャンセル

同じタグがついた質問を見る

  • PHP

    21413questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • WordPress

    7704questions

    WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。