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

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

ただいまの
回答率

87.33%

【ワードプレス】カスタム投稿で選択したカテゴリの子カテゴリ名を取得してトップページに表示したい。

解決済

回答 3

投稿

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

score 9

ワードプレスで作成しているサイトに
info というカスタム投稿をプラグインで作成しました。
タクソノミースラッグはinfo_catになります。

infoにカテゴリーを作成し、
artist の子カテゴリに Aさん Bさん Cさん Dさん Eさん
media の子カテゴリに cm tv movie book other

現在このような状態になっております。

投稿する際に アーティスト Aさん の メディア TV といったように複数のカテゴリを選択しています。
トップページでは、日付と TV(メディアで選択したもの) と 記事タイトルを取得したものを表示するようにしたいのですが、どうしてもメディアの子カテゴリ名(tvなど)を取得をすることができません。

やり方がどうしてもわからず現在は最下層のカテゴリを選択する
という指示を出しているのですが、アーティストの最下層のカテゴリが表示されてしまうこともあり、
メディアの最下層という指定の仕方を教えていただきたいです。

現在のタグは以下になります。

<div class="news_list">
    <?php $args = array(
              'post_type' => 'info', /* カスタム投稿名が「info」の場合 */
              'posts_per_page' => 5, /* 表示する数 */
            ); ?>

            <?php $my_query = new WP_Query( $args ); ?>

            <ul>

            <?php while ( $my_query->have_posts() ) : $my_query->the_post(); ?>

<!-- ▽ ループ開始 ▽ -->

                  <li>
                    <span class="day wf-sawarabimincho"><?php the_time( get_option( 'date_format' ) ); ?></span>
                      <?php
                      $cats = get_the_terms( $post->ID, 'info_cat' );
                      $current_cat = '';
                      foreach ( $cats as $cat ) {
                          if ( ! $current_cat || cat_is_ancestor_of( $current_cat, $cat ) ) {
                              $current_cat = $cat;
                          }
                      } ?>
                      <a href="<?php echo get_category_link( $current_cat ); ?>">
                          <span class="info_cat wf-sawarabimincho">
                              <?php echo $current_cat->name; ?>
                          </span>
                      </a><br class="br_sp">
                      <span class="info_txt wf-sawarabimincho">
                          <a href="<?php the_permalink(); ?>">
                              <?php echo wp_trim_words( get_the_title(), 30, '...' ); ?>
                          </a>
                      </span>
                  </li>
<!-- △ ループ終了 △ -->
                <?php endwhile; ?>
    </ul>
</div>

ほかにも下記を試したのですが、全部cmしか拾ってこない状況です。

<?php
        // 子カテゴリのスラッグを指定
        $tax_slugs = array( 'media' );

        foreach( $tax_slugs as $tax_slug) :
            // 対象のタクソノミーを指定
            $taxonomy = 'info_cat';

            $term_info = get_term_by( 'slug', $tax_slug, $taxonomy );

            $args = array(
                'post_type' => 'info',
                'nopaging' => true,
                'tax_query' => array(
                    array(
                        'taxonomy' => $taxonomy,
                        'field' => 'slug',
                        'terms' => array( $tax_slug ),
                    )
                )
            );

            query_posts($args);

            if ( have_posts() ) : ?>

                // リストの見出しとしてターム名(カテゴリー名)を表示します。
                <h2><?php echo $current_cat->name; ?></h2>
                <ul>
                <?php
                while ( have_posts() ) : the_post(); ?>

                    <li><span class="info_cat wf-sawarabimincho"><?php echo $current_cat->name; ?></span><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
                <?php endwhile; ?>
                </ul>
            <?php endif; ?>
            <?php wp_reset_query(); ?>
        <?php endforeach; ?><!-- $tax_slugs -->

初心者で申し訳ございませんが、
ご教授よろしくお願いいたします。

  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 3

+1

子カテゴリでなく別のカスタムタクソノミーにしたほうが早いと思います。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2020/06/26 14:18

    回答ありがとうございます!
    それも考えたのですが、
    アーティストの個人の紹介の固定ページで
    AさんかつTVなどのインフォの情報を子カテゴリ別に取得する予定でして、
    分けてしまうとそれをすることが難しくなってしまうと思い
    トライしています。

    キャンセル

  • 2020/06/26 14:27

    分けないほうが考えることが増えると思いますが、がんばってみてください。
    ちなみに少なくとも「query_posts」は使わないで作るほうが良いです。

    キャンセル

  • 2020/06/26 14:40

    ご指摘ありがとうございます!
    いろいろな方法を検討してみます!

    キャンセル

check解決した方法

0

プラグイン「Advanced Custom Fields」を利用して解決することができました。

表示したいのはただの文字列でしたので、カスタムフィールドにメディア情報を入れ、
それを呼び出すようにしました。

<?php $field = get_field('media_type'); if ($field): ?>
<?php foreach( $field as $value ): ?>
<span class="info_cat01">
<?php echo $value; ?></span>
<?php endforeach; ?>
<?php endif; ?>

質問を見てくれた方
答えてくださったkei344さん
ありがとうございました。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

0

プラグイン「Advanced Custom Fields」を利用して解決することができました。

表示したいのはただの文字列でしたので、カスタムフィールドにメディア情報を入れ、
それを呼び出すようにしました。

<?php $field = get_field('media_type'); if ($field): ?>
<?php foreach( $field as $value ): ?>
<span class="info_cat01">
<?php echo $value; ?></span>
<?php endforeach; ?>
<?php endif; ?>

質問を見てくれた方
答えてくださったkei344さん
ありがとうございました。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

  • ただいまの回答率 87.33%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

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

  • トップ
  • PHPに関する質問
  • 【ワードプレス】カスタム投稿で選択したカテゴリの子カテゴリ名を取得してトップページに表示したい。