Wordpress

【wordpress】投稿がカスタム投稿タイプのタームに所属しているか判別する方法


投稿記事の単体のページ内で、その投稿がカスタム投稿タイプの特定のタームに所属しているかを判別して表示を変えてみます。

 

is_object_in_termを使う方法

このあとに書くforeachを最初に思いついてあれこれしていたのですが、今回のケースだとこちらを使うほうが俄然カンタンです。
関数リファレンス/is object in term – WordPress Codex 日本語版

投稿ID

投稿記事のページ内であれば$post->IDで良いでしょう。

もしくはget_the_ID()などでも良さそうです。
get_the_ID:WordPress私的マニュアル

確認したいタームが属するカスタムタクソノミの名前

タームが所属するカスタムタクソノミーのIDを指定しましょう。register_taxonomy()で設定した名前です。これは必須項目です。

確認したいタームのスラッグ

今回は「スラッグ」と書きましたが、タームのIDや名前でも良いらしいです。もしくはそれらの配列。

以上を踏まえて、試しに書いてみましょう。

get_the_terms()とforeachを使う

get_the_terms()で記事のターム情報を取得します。
get_the_terms:WordPress私的マニュアル

前項と同じ要領で指定すると以下のようになります。

foreach()でタームの情報を取得

変数termDataには、投稿記事のタームに関する情報が配列で入っています。
これをforeach()でループさせましょう。

中部ぐらいに$arg[] = $tSlugとありますが、のちのin_array()で配列の中にあるキーワードを検索するときに、検索範囲としたい(今回はスラッグから「shibuya」を探すことにしましょう)ものを配列に代入し続けることでif(in_array())を使うことが出来ます。
PHP: in_array – Manual

番外編:カスタムフィールドでも同じことが出来ます。

前項の「get_the_terms()とforeach()を使う」のとほぼ同じ要領で、カスタムフィールドの中から値を検索して表示/非表示を切り替えることが出来ます。

ケースとしては、たとえば「Custom Field Template」プラグインとかでチェックボックス項目やラジオボタンなど「項目の選択」ができるカスタムフィールドを作成した場合。

例を挙げると、「対象の性別」というカスタムフィールドを作って、チェックボックスで

  • 男性
  • 女性
  • 男女兼用

と選択できるようにしたときです。

Custom Field Template設定例

get_post_meta()でカスタムフィールドの値を取得

post_customだと単一の値しか取得できず、今回はin_arrayでの検索を目的としているので、配列で取得するとします。まぁこうしておけば万が一複数の値が選択できる仕様に変更しても対応できますしね

get_post_meta:WordPress私的マニュアル

では、これを利用してin_arrayで表示を分岐してみます。

これでOK!


 

以上です。
困ったときに役に立ったのでis_object_in_term()について書きました。

 

でわ!