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

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

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

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

PHP

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

480閲覧

【WordPress】カテゴリの個数によって出力方法を変更したい

hello-

総合スコア12

WordPress

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

PHP

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2019/08/18 04:12

お聞きしたいこと

get_the_terms()
でカスタムタクソノミーで定義したカテゴリリストを表示しているのですが、
これを個数によって出力内容を変えたいです。

personというカテゴリを作成し、01〜07までカテゴリを作りました。
現在は、選択したものが
「person01,person02,person03,person04,person05,person06,person07」
と全件表示される状況です。
このpersonの選択個数が3個以上の場合、4件目以降は「他」として出力したいです。
「person01,person02,person03,他」
→「04〜07」は表示しないようにしたい。

現在書いているコード

php

1$terms = get_the_terms( $post->ID, 'person' , array('orderby' => 'ID', 'order' => 'ASC') ) ; 2 foreach ( $terms as $term ) { 3 echo '<li class="categoryItem categoryItem--' . esc_html($term->slug) .'"><span class="categoryItem--text">'. esc_html($term->name) . '</span></li>'; 4 }

現在の出力内容

html

1<li class="categoryItem categoryItem--01"><span class="ccategoryItem--text">人物01</span></li> 2<li class="categoryItem categoryItem--02"><span class="ccategoryItem--text">人物02</span></li> 3<li class="categoryItem categoryItem--03"><span class="ccategoryItem--text">人物03</span></li> 4<li class="categoryItem categoryItem--04"><span class="ccategoryItem--text">人物04</span></li> 5<li class="categoryItem categoryItem--05"><span class="ccategoryItem--text">人物05</span></li> 6<li class="categoryItem categoryItem--06"><span class="ccategoryItem--text">人物06</span></li> 7<li class="categoryItem categoryItem--07"><span class="ccategoryItem--text">人物07</span></li>

希望の出力内容

html

1<li class="categoryItem categoryItem--01"><span class="ccategoryItem--text">人物01</span></li> 2<li class="categoryItem categoryItem--02"><span class="ccategoryItem--text">人物02</span></li> 3<li class="categoryItem categoryItem--03"><span class="ccategoryItem--text">人物03</span></li> 4<li class="categoryItem categoryItem--00"><span class="ccategoryItem--text"></span></li> 5 6※他の<li>のclass名はなんでも大丈夫です。

条件分岐などの書き方がいまいちわからないので、お聞きさせていただきました。
お知恵をお借りできますと幸いです。
どうぞよろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

カウントして条件分岐すればいいのではってのは同意だけどコードの重複はいなめないからシンプル化しておいたw

出力回数をカウントして規定回数じゃなかったら 他 を出力してループを停止

サンプルコード

php

1// サンプルデータ 2$terms = [ 3 "01"=>"name1", 4 "02"=>"name2", 5 "03"=>"name3", 6 "04"=>"name4", 7 "05"=>"name5" 8]; 9 10 11// サンプルコード 12$i =0; 13foreach ( $terms as $key => $term ): 14 $i++; 15 if ($i >= 4) : 16 echo '他' . PHP_EOL; 17 break; 18 endif; 19 echo "$key => $term" . PHP_EOL; 20endforeach;

結果

01 => name1 02 => name2 03 => name3 他

投稿2019/08/18 04:56

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

hello-

2019/08/18 05:53

ありがとうございます。 いただいた方法ですと、 $termsに出力内容をそれぞれ記載する形になるでしょうか? カスタムタクソノミーで、personから取得する方法があまりわからずの状態です。 初歩的な質問ですいません。 ご教示いただけますと幸いです。 どうぞよろしくお願いいたします。
退会済みユーザー

退会済みユーザー

2019/08/18 06:31

$terms は取得したデータの配列で問題ないですが・・ echo "他" → 指定件数以上の時に表示される文字列(HTML)に置き換える echo "$key => $term" → カテゴリ名のを表示する文字列(HTML)に置き換える。
hello-

2019/08/18 07:33

度々のご回答ありがとうございます! 追加のご質問もご丁寧に回答いただきありがとうございました。 いただいた内容、とても勉強になりました。 ベストアンサーは1つしか選べないのですが、本当に助かりました。 他にも聞きたいことがあったら、リクエスト等させていただけますと幸いです。 本当にありがとうございました!
guest

0

ベストアンサー

count()を使って個数を取得して条件分岐すればいいのでは。

以下、先ほどの回答からちょっと修正します。
(手元に検証に使えるWordpressの環境がないので検証していません)

PHP

1$terms = get_the_terms( $post->ID, 'person' , array('orderby' => 'ID', 'order' => 'ASC') ) ; 2if(count($terms)>=4): 3 for($cnt=0,$cnt<3,++$cnt): 4 echo '<li class="categoryItem categoryItem--' . esc_html($terms[$cnt]->slug) .'"><span class="categoryItem--text">'. esc_html($terms[$cnt]->name) . '</span></li>'; 5 endfor; 6 echo '<li class="categoryItem categoryItem--00"><span class="ccategoryItem--text">他</span></li>'; 7else: 8 foreach ( $terms as $term ): 9 echo '<li class="categoryItem categoryItem--' . esc_html($terms[$cnt]->slug) .'"><span class="categoryItem--text">'. esc_html($terms[$cnt]->name) . '</span></li>'; 10 endforeach; 11endif;

投稿2019/08/18 04:39

編集2019/08/18 06:32
Take_it

総合スコア357

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

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

hello-

2019/08/18 05:08 編集

ありがとうございます! いただいたものを元に記述し、「他」を出力まではできたのですが、 <li class="categoryItem categoryItem--01"><span class="ccategoryItem--text">人物01</span></li> <li class="categoryItem categoryItem--02"><span class="ccategoryItem--text">人物02</span></li> <li class="categoryItem categoryItem--03"><span class="ccategoryItem--text">人物03</span></li> <li class="categoryItem categoryItem--01"><span class="ccategoryItem--text">人物01</span></li> <li class="categoryItem categoryItem--02"><span class="ccategoryItem--text">人物02</span></li> <li class="categoryItem categoryItem--03"><span class="ccategoryItem--text">人物03</span></li> <li class="categoryItem categoryItem--01"><span class="ccategoryItem--text">人物01</span></li> <li class="categoryItem categoryItem--02"><span class="ccategoryItem--text">人物02</span></li> <li class="categoryItem categoryItem--03"><span class="ccategoryItem--text">人物03</span></li> <li class="categoryItem categoryItem--00"><span class="ccategoryItem--text">他</span></li> と、人物01〜人物03が3回表示されてしまいました。 こちらは、どうやって解消したら良いでしょうか? 質問ばかりすいません。 恐れ入りますが、ご回答いただけますと幸いです。 どうぞよろしくお願いいたします。
Take_it

2019/08/18 05:38

あ、ごめんなさい。 検証せず書きなぐりましたが私の回答だと1~3を3回繰り返してしまいますね。お恥ずかしい。 asahina1979さんの回答を参考にしてください。
hello-

2019/08/18 05:51

ご確認ありがとうございます。 なんどもすいません。 参考にしてみたのですが、 $terms での取得がうまくいかず、画面に何も表示されなくなってしまいました。 Take_itさまの方法ですと、 for($cnt = 8 ; $cnt <= 1; $cnt++): の箇所を変更すると良いでしょうか? それとも foreach ( $terms as $term): でしょうか? 恐れ入りますが、再度ご教示いただけますと幸いです。 何卒よろしくお願いいたします。
Take_it

2019/08/18 05:54

回答を修正しましたので確認してみてください。 手元にパッと使える検証用のWordpress環境がないため、当方では検証をしていませんが、$terms配列の添え字が0からの連番であればこれでいいかと思います。 (実はget_the_terms()も使用したことありません)
hello-

2019/08/18 06:20

回答のご修正、ありがとうございます。 いただいたものでもダメでした。 条件分岐自体は動いているので、あとは中身を単一で3回繰り返すだけなのですが、なかなかうまくいかない状況です。 検証環境もない中、諸々ご相談に乗っていただきありがとうございます。 get_the_terms()は、カスタムタクソノミーで定義したものを引っ張って来るために使用しているのですが、私も経験が浅く、恥ずかしながら初めてです。 もう少し考えてみます。 何かいい方法など、他にございましたらご教示いただけますと幸いです。 何卒よろしくお願いいたします。
hello-

2019/08/18 07:34

Take_itさん 何回もご回答いただきありがとうございました。 おかげさまで、やりたいことが無事、実装できました。 本当に助かりました。 ありがとうございました!!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問