WORDPRESS TIPS

WordPressのタームで条件分岐する方法|is_taxとhas_termの使い分け

タームの一覧ページで表示を変えるなら is_tax()、記事に付いているタームで表示を変えるなら has_term() を使います。どちらも「タームの判定」ですが、判定する対象が違います。

たとえば、制作実績の「Web制作」一覧だけに説明を出したい場合と、「Web制作」に分類された実績にラベルを付けたい場合では、使う関数を分けます。

一覧ページならis_taxを使う

カスタムタクソノミー work_category のターム web の一覧ページを判定する例です。PHPテンプレートの説明文を表示したい位置に記述します。

<?php if ( is_tax( 'work_category', 'web' ) ) : ?>
    <p>Web制作の実績をご紹介します。</p>
<?php endif; ?>

work_category は分類そのものの名前、web は分類項目のスラッグです。管理画面上の表示名と混同しないようにします。複数のタームを対象にするときは2つ目の引数を array( 'web', 'design' ) に変更します。

is_tax( 'work_category' ) なら、そのタクソノミーに属するすべてのターム一覧が対象になります。WordPress標準のカテゴリー一覧は is_category()、タグ一覧は is_tag() で判定します。is_tax() は標準のカテゴリー・タグ一覧を判定しません。公式:is_tax

記事に付いたタームならhas_termを使う

一覧ページの各カードや記事詳細で対象の記事に web が付いているか調べる場合はこちらです。ループ内に記述します。

<?php if ( has_term( 'web', 'work_category', get_the_ID() ) ) : ?>
    <span class="work-label">Web制作</span>
<?php endif; ?>

3つ目の引数に投稿IDを渡しているため、どの記事を調べるかが明確になります。ループ外から判定するならget_the_ID() を調べたい投稿のIDに置き換えます。has_term() は標準カテゴリーにも使えますが、カテゴリーなら has_category() と書くと意図が伝わりやすくなります。公式:has_term

親タームの判定は子孫まで自動で広がらない

「Web制作」の下に「ECサイト」があっても、is_tax( 'work_category', 'web' ) が「ECサイト」の一覧まで真になるわけではありません。記事の所属判定でも子タームだけを付けた投稿に対し親タームを指定した has_term() が自動的に真になるわけではありません。

子孫も対象にするなら、対象スラッグを配列で指定するか、親子関係を調べる処理を別途組みます。まず「親だけ」「子だけ」「両方に所属」のどれを想定するか整理すると、条件が複雑になりにくくなります。

判定できないときの確認点

  • 見ているのはターム一覧か、記事詳細か。
  • タクソノミー名とタームのスラッグが正しいか。
  • 対象の投稿にタームが実際に付いているか。
  • 条件分岐タグをクエリー確定前に実行していないか。

functions.php の読み込み直後に is_tax() を実行しても、表示ページはまだ確定していません。テンプレートで使うか、用途に応じたフックの中で判定します。メインクエリーの件数を変える場合はpre_get_postsで表示件数を変更する方法も参照してください。

分類ごとの表示を整えたい場合

JapanBlueWorksではカテゴリー別の案内や制作実績のラベルなど、WordPressの分類に合わせた表示調整をご相談いただけます。「どのページで、何の分類に応じて、何を変えたいか」と対象URLが分かると、必要な実装を確認しやすくなります。

タームによる表示の切り替えを相談する

← Tips一覧へ