今回は表題の通りですが、特定のタクソノミー(カテゴリー)を除外してラベルを作る方法を記事にしたいと思います。
どういう時に使うの?
- 記事に属するタクソノミー(カテゴリー)を表示したい
- 同じカテゴリー枠の中に特定のタクソノミーも混ざっていて、それは除外したい
こういう時に使います。
特に同じカテゴリー枠の中に特定のタクソノミーも混ざっていて、それは除外したいという場面で活躍します。
Aというタームは別ページで展開するように作成したもので、本来の記事関連(アーカイブ含む)にはAというタクソノミーは表示させたくない。というケースですね。
それではいってみましょう!
投稿記事のタクソノミー情報を取得する
まずは投稿記事に属するタクソノミーの情報を取得します。
<?php $categories = wp_get_post_terms( 投稿ID , 'category' ); ?>
これを記述する事で指定した記事のタクソノミー情報を取得する事ができます。
ですがこのままだと投稿IDを一つ一つ設定しなければいけないし、ループ内では使いづらいので以下のようにします。
<?php
$ID = get_the_ID();
$categories = wp_get_post_terms( $ID , 'category' );
?>
get_the_IDで各投稿のIDを取得して変数にセット。
それをwp_get_post_termsの中にセットすればOK!
除外したいタクソノミーを設定
ここまでいったらあとは除外したいタクソノミーを指定すれば完成です。
<?php
$ID = get_the_ID();
$categories = wp_get_post_terms( $ID , 'category' , array( 'exclude' => タクソノミーID ) );
?>
excludeで除外するタクソノミーIDを指定しているのですが、親子関係でタクソノミーを作成している場合、子タクソノミーは残ってしまい表示されたままになってしまいます。
子孫タクソノミーを一括して除外する事も可能
じゃあ「子タクソノミーも指定してあげればいいんじゃないの?」となりそうですが、実装時は良くても納品後の運用段階で子タクソノミーを追加した時に対応できなくなってしまいます。
なので、excludeをexclude_treeにしてあげることで、指定したタクソノミーIDの子タクソノミーも一括して取得しなくなります。
まとめ
結果としてはこのようなコードを記述すればOKだと考えています。
<?php
$ID = get_the_ID();
$categories = wp_get_post_terms( $ID , 'category' , array( 'exclude_tree' => タクソノミーID ) );
echo $categories[0]->name;
?>
これで指定した親タクソノミーとその下のタクソノミーも除外された上で、記事に結びついているタクソノミーを表示することができます。
こちらはWordPressのデフォルト投稿の記述方法なので、カスタム投稿になってくると若干記述が変わると思います。
そちらは出会い、検証、実証した段階でこの記事に追記していこうと思います。
ではまた!
当記事で紹介、及び記載している内容は個人的考えに基づいております。
責任は負いかねますので、お試しの際は必ずバックアップを取った上で自己責任のもと実行してください。