【WordPress】子カテゴリーの記事を特定の親カテゴリーに属する記事かどうか判定する方法

【WordPress】子カテゴリーの記事を特定の親カテゴリーに属する記事かどうか判定する方法

こんにちは、ゆうや(@yuyaphotograph)です!

この記事では、

  • WordPressで、子カテゴリーの記事を特定の親カテゴリーに属する記事かどうか判定する方法が知りたい
  • post_is_in_descendant_category関数を使いたい

という方のお悩みを解決します!

きっと目からウロコのTipsです。

少なくともぼくはこの小技を知ったとき、感動のあまりカフェで叫びそうになりました。

子カテゴリー記事の条件分岐実装で躓いている方のお役に立てれば幸いです。

post_is_in_descendant_categoryを使う

実装の流れはこうです。

  1. 子テーマのfunctions.phpに、post_is_in_descendant_category関数を定義するコードを貼り付ける
  2. 子カテゴリーの記事が特定の親カテゴリーに属しているか判定するコードを該当の箇所に貼り付ける(指定する投稿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でよく使う関数スニペットまとめWordPressでよく使う関数スニペットまとめ Contact Form 7を使うときに役立つ記事まとめ WordPressのパスワード保護ページで記事の途中までパスワードなしでも読めるようにするカスタマイズ方法【WordPress】パスワード保護ページで記事の途中までパスワードなしでも読めるようにカスタマイズする方法