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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

WordPress

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

PHP

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

Q&A

解決済

3回答

2511閲覧

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

itchy_0528

総合スコア9

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

WordPress

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

PHP

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

0グッド

0クリップ

投稿2020/06/26 03:58

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

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

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

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

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

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

php

1<div class="news_list"> 2 <?php $args = array( 3 'post_type' => 'info', /* カスタム投稿名が「info」の場合 */ 4 'posts_per_page' => 5, /* 表示する数 */ 5 ); ?> 6 7 <?php $my_query = new WP_Query( $args ); ?> 8 9 <ul> 10 11 <?php while ( $my_query->have_posts() ) : $my_query->the_post(); ?> 12 13<!-- ▽ ループ開始 ▽ --> 14 15 <li> 16 <span class="day wf-sawarabimincho"><?php the_time( get_option( 'date_format' ) ); ?></span> 17 <?php 18 $cats = get_the_terms( $post->ID, 'info_cat' ); 19 $current_cat = ''; 20 foreach ( $cats as $cat ) { 21 if ( ! $current_cat || cat_is_ancestor_of( $current_cat, $cat ) ) { 22 $current_cat = $cat; 23 } 24 } ?> 25 <a href="<?php echo get_category_link( $current_cat ); ?>"> 26 <span class="info_cat wf-sawarabimincho"> 27 <?php echo $current_cat->name; ?> 28 </span> 29 </a><br class="br_sp"> 30 <span class="info_txt wf-sawarabimincho"> 31 <a href="<?php the_permalink(); ?>"> 32 <?php echo wp_trim_words( get_the_title(), 30, '...' ); ?> 33 </a> 34 </span> 35 </li> 36<!-- △ ループ終了 △ --> 37 <?php endwhile; ?> 38 </ul> 39</div>

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

php

1<?php 2 // 子カテゴリのスラッグを指定 3 $tax_slugs = array( 'media' ); 4 5 foreach( $tax_slugs as $tax_slug) : 6 // 対象のタクソノミーを指定 7 $taxonomy = 'info_cat'; 8 9 $term_info = get_term_by( 'slug', $tax_slug, $taxonomy ); 10 11 $args = array( 12 'post_type' => 'info', 13 'nopaging' => true, 14 'tax_query' => array( 15 array( 16 'taxonomy' => $taxonomy, 17 'field' => 'slug', 18 'terms' => array( $tax_slug ), 19 ) 20 ) 21 ); 22 23 query_posts($args); 24 25 if ( have_posts() ) : ?> 26 27 // リストの見出しとしてターム名(カテゴリー名)を表示します。 28 <h2><?php echo $current_cat->name; ?></h2> 29 <ul> 30 <?php 31 while ( have_posts() ) : the_post(); ?> 32 33 <li><span class="info_cat wf-sawarabimincho"><?php echo $current_cat->name; ?></span><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li> 34 <?php endwhile; ?> 35 </ul> 36 <?php endif; ?> 37 <?php wp_reset_query(); ?> 38 <?php endforeach; ?><!-- $tax_slugs -->

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

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

投稿2020/06/26 04:31

kei344

総合スコア69398

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

itchy_0528

2020/06/26 05:18

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

2020/06/26 05:27

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

2020/06/26 05:40

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

0

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

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

php

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

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

投稿2020/06/29 10:04

itchy_0528

総合スコア9

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

自己解決

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

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

php

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

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

投稿2020/06/29 09:48

itchy_0528

総合スコア9

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問