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

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

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

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

PHP

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

1回答

915閲覧

記事が所属しているタームと所属していないタームの出力形式を変えたい

maruku_1_27

総合スコア4

WordPress

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

PHP

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2021/12/15 07:43

前提・実現したいこと

WordPressにて、現在閲覧中記事に特定カスタムタクソノミーのタームを全て出力し、
且つ記事が所属しているタームと所属していないタームの出力形式を変えたいです。

補足情報

カスタム投稿タイプ:service
カスタムタクソノミー:service-op
ターム:a、b、c、d、e、f、g

例)
特定の末端記事が所有しているタームがaとeだとする

php

1<ul> 2 <li class="app"> a </li> 3 <li> b </li> 4 <li> c </li> 5 <li> d </li> 6 <li class="app"> e </li> 7 <li> f </li> 8 <li> g </li> 9</ul>

と、このように全てのタームを出力しながら、所属しているタームにはclassを付けたいです。

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

そもそもの配列化が間違っているような気がしております。
その為、in_arrayで配列チェックをかけてもclassが付与されません。

有識者の皆様には笑われてしまう質問かもしれませんが、何卒教示して頂きたく存じます。

該当のソースコード

single.php

php

1<ul> 2 <?php //現在記事についているオプションタクソノミーのタームを取得 3 $terms = get_the_terms( $post->ID, 'service-op' ); 4 $draught_links = array(); 5 foreach ( $terms as $term ) { 6 $draught_links[] = $term->name; 7 $on_draught = join( ", ", $draught_links ); 8 } 9 10 //オプションタクソノミーのタームを全て取得 11 $args = array( 'hide_empty' => false ); 12 $taxonomys = get_terms( 'service-op', $args ); 13 foreach ( $taxonomys as $taxonomy ) { 14 $draught_op[] = $taxonomy->name; 15 $on_draught_op = join( ", ", $draught_op ); 16 if ( in_array( $on_draught, $draught_op, true ) ) { 17 echo ' <li class="app">' . $taxonomy->name . '</li>'; 18 } else { 19 echo ' <li>' . $taxonomy->name . '</li>'; 20 } 21 } 22 ?> 23</ul>

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

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

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

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

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

guest

回答1

0

ベストアンサー

投稿に紐づけられているターム部分

PHP

1 foreach ( $terms as $term ) { 2 $draught_links[] = $term->name; 3 $on_draught = join( ", ", $draught_links ); 4 }

foreach内で毎回結合する意味がないので外に出しましょう。

PHP

1 foreach ( $terms as $term ) { 2 $draught_links[] = $term->name; 3 } 4 $on_draught = join( ", ", $draught_links );

実際に検索する部分

PHP

1foreach ( $taxonomys as $taxonomy ) { 2 $draught_op[] = $taxonomy->name; 3 $on_draught_op = join( ", ", $draught_op ); 4 if ( in_array( $on_draught, $draught_op, true ) ) {

チェックすべきは現在のタームが$on_draught に含まれているかです。
検索キーを結合する必要はありません後in_arrayの引数が逆です

PHP

1foreach ( $taxonomys as $taxonomy ) { 2 if ( in_array( $taxonomy->name, $on_draught , true ) ){

投稿2021/12/15 08:22

gogoweb_ikeda

総合スコア1426

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

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

maruku_1_27

2021/12/15 23:03

お返事遅くなってしまい申し訳ございません。 説明まで加えていただき大変勉強になりました。 ご教示ありがとうございます! いただいたご回答を参考にjoinを外したら上手くいきましたm(__)m gogoweb_ikeda様、本当にありがとうございました。 皆さまの後学にも下記貼り付けておきます。 <ul> <?php //現在記事についているオプションタクソノミーのタームを取得 $terms = get_the_terms( $post->ID, 'service-op' );//service-opはカスタムタクソノミー $draught_links = array(); foreach ( $terms as $term ) { $draught_links[] = $term->name; } //オプションタクソノミーのタームを全て取得 $args = array( 'hide_empty' => false );//記事が0件でもget_terms()でリンクやターム名を表示する $taxonomys = get_terms( 'service-op', $args );//service-opはカスタムタクソノミー foreach ( $taxonomys as $taxonomy ) {//配列を反復処理 $draught_op[] = $taxonomy->name; if ( in_array( $taxonomy->name, $draught_links, true ) ) {//ここで配列チェック echo ' <li class="app">' . $taxonomy->name . '</li>';//該当する場合の記述 } else { echo ' <li>' . $taxonomy->name . '</li>';//該当していない場合の記述 } } ?> </ul>
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問