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

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

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

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

Q&A

解決済

1回答

4184閲覧

WordPressで「特定タクソノミーの全ターム」と「現在の記事が属するターム」を比較したい

waon

総合スコア17

PHP

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

0グッド

0クリップ

投稿2017/04/12 06:09

WordPressサイトの作り方を勉強をしています。
カスタム投稿タイプについて質問なのですが、

「fruit」というタクソノミーを作り、
「apple」「orange」「grape」というタームがあったとします。

single.phpでfruitの全タームを表示させつつ、
"その記事が属さないターム" はOFFっぽいデザインで表示させたいのですが、方法はありますか?

(↓こんなイメージです)
イメージ説明

いい方法が分からないのですが、

01.記事が属するタームを取得して

$currents = get_the_terms( $post->ID, 'fruit' ); foreach( $currents as $current ): ~ スラッグを配列に格納? ~ }

02.fruitの全タームを取得して

$terms = get_terms( 'fruit' ); foreach ( $terms as $term ){ ~ ここで01のスラッグと比較? ~ }

というような感じでコードを書いてみてるのですが、
どうやって比較できるのか、01が複数ある場合は、などで躓いています。
(そもそも正しいのかも分からないのですが、、)

どなたか、分かる方がいらっしゃいましたら教えてください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

テストしていないのでエラーがあるかもしれませんが、こんなイメージだと思います。
要は総当たりで比較しているだけです。

PHP

1// 未テストコード 2$currents = get_the_terms( $post->ID, 'fruit' ); 3$terms = get_terms( 'fruit' ); 4 5foreach($terms as $term) : 6 7 // 結果格納用フラグ 8 $flag = false; 9 10 // 比較 11 foreach($currents as $current) : 12 if($term->term_id == $current->term_id) : 13 $flag = true; // 一致したらフラグを立てる 14 break; 15 endif; 16 endforeach; 17 18 // 結果 19 if($flag) : 20 echo '<span class="active">' . $term->name . '</span>'; 21 else : 22 echo '<span class="inactive">' . $term->name . '</span>'; 23 endif; 24 25endforeach;

投稿2017/04/12 08:34

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

waon

2017/04/13 05:59

mizさん、回答ありがとうございます、 希望通りの表示ができました! $term と $current で一致したら$flagをtrueにしてbreak、 $flagの状態に応じて出力を振り分ける、 という比較の工程がとても勉強になりました。 本当にありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問