特定のカテゴリかその子カテゴリに分類された投稿で条件分岐する方法
特定のカテゴリかその子カテゴリに分類された投稿のみに何かの要素を表示させたい場合があるかと思います。特定のカテゴリかその子カテゴリに属する投稿だけに広告を表示させるなど。
こちら条件分岐は、デフォルトのコードだけでは行うことができません。
予め簡単なカスタマイズを行う必要があります。
特定のカテゴリかその子カテゴリを条件分岐する方法をご紹介します。
functions.phpにコードを記述する
下準備として、functions.phpにコードを記述します。
以下のコードをfunctions.phpに記述してください。
function post_is_in_descendant_category( $cats, $_post = null ){
foreach ( (array) $cats as $cat ) {
$descendants = get_term_children( (int) $cat, 'category');
if ( $descendants && in_category( $descendants, $_post ) )
return true;
}
return false;
}
このコードを記述しておかないと条件分岐を行うことができません。
条件分岐を行いたい場所に条件分岐コードを記述する
今回は、特定のカテゴリかその子カテゴリに分類されている投稿ページのみに要素を表示させるものとして解説を進めていきます。
投稿ページを管理しているテンプレートは、一般的に【single.php】ですので、【single.php】の要素を表示させたい箇所に、以下の条件分岐コードを記述してやります。
<?php if ( in_category(親カテゴリID) || post_is_in_descendant_category(親カテゴリID) ): ?>
ここに指定したカテゴリかその子カテゴリに分類された投稿の場合に表示させる要素を記述
<?php endif; ?>
上記の【親カテゴリID】の部分は、条件分岐したいカテゴリのカテゴリIDに置き換えてください。
例えば、特定のカテゴリのIDが【2】であれば、以下の様に置き換えてやります。
<?php if ( in_category(2) || post_is_in_descendant_category(2) ): ?>
ここに指定したカテゴリかその子カテゴリに分類された投稿の場合に表示させる要素を記述
<?php endif; ?>
これで、カテゴリIDが【2】のカテゴリかその子カテゴリに分類されている投稿かどうかを判断して、分類されている投稿の場合は指定した要素を表示することができます。
親カテゴリかその子カテゴリに分類されているかどうかで表示内容を切り替えたい場合
親カテゴリかその子カテゴリに分類されている投稿と分類されていない投稿とで表示内容を切り替えたい場合は、以下の様な条件分岐コードを記述してやりましょう。
<?php if ( in_category(親カテゴリID) || post_is_in_descendant_category(親カテゴリID) ): ?>
ここに指定したカテゴリかその子カテゴリに分類された投稿の場合に表示させる要素を記述
<?php else: ?>
ここに指定したカテゴリかその子カテゴリに分類されていない投稿の場合に表示させる要素を記述
<?php endif; ?>
上記の【親カテゴリID】の部分は、条件分岐したいカテゴリのカテゴリIDに置き換えてください。
まとめ
特定カテゴリかその子カテゴリに分類された投稿かどうかを判断する条件分岐のご紹介でした。
特定のカテゴリかその子カテゴリに分類されている投稿の場合のみ、広告を表示させるなど使い道は色々とあるかと思います。
いつも思いますが、条件分岐って本当に便利ですよね。
条件分岐を知っているだけでも、カスタマイズの幅は広がるかと思います。
よく使う条件分岐を42種類まとめてみました。
⇒ 【保存版】WordPressの条件分岐を42個まとめてみました!
コメントを残す