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記事のみが一覧に表示されました!
めでたしめでたし!