【WordPress】カテゴリー一覧(アーカイブ)ページで子カテゴリーを表示しないカスタマイズ

【WordPress】カテゴリー一覧(アーカイブ)ページで子カテゴリーを表示しないカスタマイズ

WordPressで階層構造のあるカテゴリーかつ親カテゴリーのアーカイブページでは親のカテゴリーがついた記事だけでなく、子カテゴリー(孫カテゴリーや子孫も含む)も一緒に表示されます。

これはこれで仕様なので良いと思いますが、サイトによっては子カテゴリーを含まずに一覧を表示したいときもあると思い、カスタマイズしてみました。

カテゴリーアーカイブでは子カテゴリーの記事も表示される

まずは状況整理から…

↑このような感じで階層構造をもったカテゴリーがあるとします。

「ペット」カテゴリーは3件の記事、子カテゴリー「いぬ」の記事が2件、子カテゴリー「ねこ」の記事が2件あるとします。

「ペット」カテゴリーがついた記事は3件なのですが、「ペット」カテゴリーの一覧ページでは子カテゴリー「いぬ「ねこ」がついた記事を含む7件が表示されます。

「ペット」カテゴリーの子カテゴリーの記事も表示されるけど正常な動作

親カテゴリーのみ(現在のカテゴリーのみ)を表示するカスタマイズ

WordPress標準の動きに合わせるならカテゴリー構造の見直しをしたほうがいいかな?と思いますが、いろいろな理由があって、親カテゴリーの一覧では親カテゴリーのついた記事だけ表示したいということもあると思うので、試しにカスタマイズしてみたいと思います。

やりたいことは「親カテゴリーのみ表示したい」なのですが、プログラム的には「現在表示しているカテゴリーのついた記事だけ表示する」という動きになります。

サンプルコードはこちら▼

function my_category_archive_only_parent( $query ) {
	if ( ! is_admin() && $query->is_main_query() ) {
		if ( is_category() ) {
			// カテゴリー情報を取得.
			$term = get_queried_object();
			// 親カテゴリーのみ(というよりか、現在のカテゴリーのみ)表示させる.
			$query->set( 'category__in', [ $term->term_id ] );
		}
	}
}
add_filter( 'pre_get_posts', 'my_category_archive_only_parent' );

上記コードを functions.php などに追記してください。

無事に「ペット」カテゴリーがついた3記事のみが一覧に表示されました!

めでたしめでたし!