ブログ
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クリエイター塾さんにいらっしゃっていた長橋さんという受講者の方からの質問で気付きを得ました。
ありがとうございます!
IT事業と不動産運営事業を行う株式会社コミュニティコムの代表取締役。埼玉県さいたま市の大宮駅東口近くの「コワーキングスペース7F」「シェアオフィス6F」「貸会議室6F」の運営代表者。「大宮経済新聞」の編集長。WordPress日本語公式サイトのイベントカレンダー更新。他、複数の一般社団法人とNPO法人の理事などをしています。趣味は自分の思い付いたWebサービスを自分で自由に開発することです。最近は農業と食と家庭菜園のビジネスなどにも興味があります。