2017年8月17日
  • 自社保有メディアのサイト運営によるインターネット広告事業・WordPressによるサイト制作事業・コワーキングスペース・シェアオフィス・貸会議室の運営事業を行っています。

WordPressでのカスタム投稿タイプ利用時のタクソノミー条件分岐タグ「is_object_in_term」

こんにちは。株式会社コミュニティコム代表取締役の星野邦敏です。

WordPressでは、バージョン3系以降、「カスタム投稿タイプ」という「投稿」や「固定ページ」とは異なる投稿箇所を、functions.phpに記載することで増やすことが可能になりました。

また、「カスタムタクソノミー(カスタム分類)」という「カテゴリー」や「タグ」とは異なる分類方法も、functions.phpに記載することで増やすことが可能になりました。

さて、その時に、例えば、カスタム投稿タイプで作られた記事ページ内で、特定のカスタムタクソノミー(カスタム分類)にチェックが入っている時だけ表示したい文章や画像がある場合もあると思います。

通常、投稿記事内で、特定のカテゴリーにチェックが入っている時だけ表示する場合には、
in_category
という条件分岐タグを使います。
テンプレートタグ/in category – WordPress Codex 日本語版

具体的には、WordPressテーマのsingle.phpなどに

<?php if ( in_category(3) ): ?>
ここにカテゴリー特有のPHP/HTMLを書く
<?php endif; ?>

と書くと思います。

これと同じように、カスタム投稿タイプで作られた記事ページ内で、特定のカスタムタクソノミー(カスタム分類)にチェックが入っている時だけ表示したい文章や画像がある場合には、is_object_in_termという条件分岐タグを使って、分岐します。

is_object_in_termで検索しても、あまり日本語の情報が出てこないですし、現状、Codexも英語版しか記載が無いように思います。
Function Reference/is object in term « WordPress Codex

is_object_in_term( $post_id, $taxonomy, $terms )
引数1、$post_id:投稿ID
引数2、$taxonomy:タクソノミー名
引数3、$term:タームID、名前、スラッグもしくはArray

具体的には、

<?php if ( is_object_in_term($post->ID, 'food','pan') ): ?>
ここにタクソノミー特有のPHP/HTMLを書く
<?php endif; ?>

というように書くとカスタム投稿タイプ内で条件分岐ができます。

上記の例ですと、foodというタクソノミー名で、panというスラッグ名を用意している場合にのみ、特定のPHPやHTMLが表示されるよう、条件分岐されます。

カスタム投稿タイプやカスタムタクソノミーが作れることで、管理画面上で、投稿箇所を柔軟に分けることができました。
それによって、運用面のアイデアは増えましたが、一方で、運用ルールのようなものが必要だったり、WordPressテーマ内での記載も多様化されたかもしれないですね。

WordPressでのカスタム投稿タイプ利用時のタクソノミー条件分岐として、is_object_in_termという条件分岐タグがあることも、カスタム投稿タイプやカスタムタクソノミー(カスタム分類)を使う際には思い出すと良いかもしれません。

なお、上記のis_object_in_termについては、自分が数ヶ月に一度、講師をしているallWebクリエイター塾さんにいらっしゃっていた長橋さんという受講者の方からの質問で気付きを得ました。

ありがとうございます!