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

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

新規登録して質問してみよう
ただいま回答率
85.47%
WordPress

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

Q&A

解決済

2回答

492閲覧

【wp】カスタム投稿の記事一覧にターム名とスラッグを出力したい

san3san

総合スコア44

WordPress

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

0グッド

0クリップ

投稿2022/09/06 11:15

編集2022/09/06 12:53

前提

wordpressでカスタム投稿の記事一覧を表示するにあたり、
記事タイトルと共にターム(カスタム投稿のカテゴリ)のスラッグとターム名を出力したい。

実現したいこと

カスタム投稿の記事一覧を10件表示する中で
下記のように出力したい。

HTML

1<p class="cat タームのスラッグ">ターム名</p> 2<h2><a href="記事パーマリンク">記事タイトル</a></h2>

発生している問題・エラーメッセージ

スラッグもターム名も出力されない状況です。
(記事タイトル等は出力されています)

HTML

1<p class="cat "></p> 2<h2><a href="記事パーマリンク">記事タイトル</a></h2>

該当のソースコード

PHP

1//カスタム投稿itemの記事を10件表示 2<?php 3$args = array( 4 'post_type' => 'item', 5 'posts_per_page' => 10, 6); ?> 7 8<?php $my_query = new WP_Query( $args ); ?> 9 10<ul> 11 12//ループ開始 13<?php if( $my_query -> have_posts() ) : 14 while($my_query -> have_posts()) : $my_query -> the_post(); 15?> 16 17//カスタム投稿itemのタームを取得 18<?php $terms = get_terms($post->ID, 'item'); ?> 19<li> 20 21//タームのスラッグと名前を出力 22<?php if (!empty($terms)) : ?> 23 <?php foreach ( $terms as $term ) : ?> 24 <p class="cat" <?php echo $term->slag; ?>"><?php echo $term->name; ?></p> 25 <?php endforeach; ?> 26<?php endif; ?> 27 28<h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2> 29</li> 30<?php endwhile; endif; ?> 31//ループ終了 32 33<?php wp_reset_postdata(); ?> 34</ul>

試したこと

通常の投稿の場合はget_the_category()で下記のようなソースでやりたいことは実現できていますが、カスタム投稿での方法がわかりません。

PHP

1<?php 2 $cat = get_the_category(); 3 $catname = $cat[0]->cat_name; 4 $catslug = $cat[0]->slug; 5?> 6<p class="category <?php echo $catslug; ?>"><?php echo $catname; ?></p>

補足情報

基本的な理解が足りていないため、いろいろなサイトのソースを参考にしているのですが、いずれもうまくいかず困っています。
どうぞよろしくお願いします。

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

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

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

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

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

guest

回答2

0

自己解決

解決しました。

投稿タイプのスラッグで指定していたところを
タクソノミースラッグにしたところ解決しました。

get_the_terms($post->ID, 'item');  ←間違い:投稿タイプのスラッグ
get_the_terms($post->ID, 'item-cat'); ←正解:タクソノミースラッグ

PHP

1<?php 2$terms = get_the_terms($post->ID, 'item-cat'); 3 foreach($terms as $term){ 4 $term_slug = $term -> slug; 5 $term_name = $term -> name; 6 } 7?> 8<p class="cat <?php echo esc_html($term_slug); ?>"><?php echo esc_html($term_name); ?></p>

投稿2022/09/07 19:18

san3san

総合スコア44

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

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

0

その書き方であればget_terms->get_the_termsです。

【get_the_terms() | Function | WordPress Developer Resources】
https://developer.wordpress.org/reference/functions/get_the_terms/

【WordPress カスタム投稿タイプ カスタム分類】
https://www.webdesignleaves.com/pr/wp/wp_custom_post_type.html

投稿2022/09/06 12:40

kei344

総合スコア69458

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

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

san3san

2022/09/06 17:16

どうもありがとうございます。 単純に'get_terms'を'get_the_terms'に書き換えるだけでは結果は変わりませんでした。 ``` <?php $terms = get_the_terms($post->ID, 'blog'); $termname = $terms[0]->name; $termslug = $terms[0]->slug; ?> <p class="cat <?php echo $termslug; ?>"><span><?php echo $termname; ?></span></p> ``` も試しましたが結果は変わりません。 何がいけないのかわからず途方に暮れています。
san3san

2022/09/07 16:52

やはりうまくいきません。いろいろ書き方を変えて <?php $terms = get_the_terms(get_the_ID(), 'item'); ?> <?php foreach ( $terms as $term ) : ?> <p class="cat <?php echo $term->slag; ?>"><?php echo $term->name; ?></p> <?php endforeach; ?> で出力結果が <p class="cat "></p> <p class="cat "></p> と空で2回繰り返されるのですが根本的に書き方を間違えているのでしょうか。
kei344

2022/09/07 19:18

とりあえず中身が来ているか確認してみてください。 <?php foreach ( $terms as $term ) : ?> <pre><?php var_dump($term) ?></pre> <?php endforeach; ?>
san3san

2022/09/07 19:29

入れ違いになり申し訳ありません。どうもありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問