こんにちは、ゆうや(@yuyaphotograph)です!
この記事では、
- WordPressで、子カテゴリーの記事を特定の親カテゴリーに属する記事かどうか判定する方法が知りたい
- post_is_in_descendant_category関数を使いたい
という方のお悩みを解決します!
きっと目からウロコのTipsです。
少なくともぼくはこの小技を知ったとき、感動のあまりカフェで叫びそうになりました。
子カテゴリー記事の条件分岐実装で躓いている方のお役に立てれば幸いです。
post_is_in_descendant_categoryを使う
実装の流れはこうです。
- 子テーマのfunctions.phpに、post_is_in_descendant_category関数を定義するコードを貼り付ける
- 子カテゴリーの記事が特定の親カテゴリーに属しているか判定するコードを該当の箇所に貼り付ける(指定する投稿IDは親カテゴリーのID)
上記の手順1をやる前に、手順2をやってサーバーに反映してしまうと、定義されていない関数を使ったことによるエラーが発生してサイトが止まってしまう恐れがあるのでご注意を。
以下がfunctions.phpに貼り付けるコードとなります。
ちなみにこのコードはWordPress Codexで紹介されていたものです。
これを発見したときほど、Codexのありがたさを感じる瞬間はありませんでした笑
ありがたや。
functions.php
if ( ! function_exists( 'post_is_in_descendant_category' ) ) {
function post_is_in_descendant_category( $cats, $_post = null ) {
foreach ( (array) $cats as $cat ) {
// get_term_children() は整数の ID しか受け付けない
$descendants = get_term_children( (int) $cat, 'category' );
if ( $descendants && in_category( $descendants, $_post ) )
return true;
}
return false;
}
}
次に条件分岐させたい箇所で以下のコードを使いましょう。
「親カテゴリーID」と書いてある箇所は適宜、ご自身の判定したい親カテゴリーIDに変更してくださいまし。
single.phpとかheader.php
<?php if( post_is_in_descendant_category( '親カテゴリーID' ) ) : ?>
中身
<?php endif; ?>
おまけで、「特定の親カテゴリーに属する記事とその子カテゴリーに属する記事両方を判定したい」という場合は上記の代わりに以下のコードをご利用くださいまし。
single.phpとかheader.php
<?php if( in_category('親カテゴリーID') || post_is_in_descendant_category( '親カテゴリーID' ) ) : ?>
中身
<?php endif; ?>
まとめ
以上、WordPressで子カテゴリーの記事を特定の親カテゴリーに属する記事かどうか判定する方法をお送りしました。
かゆいところに手が届くのがWordPressのいいところですね。
ぜひpost_is_in_descendant_categoryを使ってみてください。
WordPressでよく使う関数スニペットまとめ