カテゴリや階層型タクソノミに直接紐づくページだけを表示
WordPressのカテゴリや階層型タクソノミのページは、直接紐づいている記事だけでなく、子カテゴリや孫カテゴリに紐づいている記事も全部表示されてしまいます。
かといって、archive.php
やcategory.php
をWP_Query
を使って別ループで表示させると、データベースとのやり取りが増えるため表示速度が遅くなったり、コードの可読性が低くなってしまいます。
これらの問題を解決するためにには、pre_get_posts
というアクションフックを使うと解決できます。
この記事がわかりやすかったです。
https://qiita.com/ruka/items/e14280d34eddf49efad1
コピペでOK。functionsに以下のコードを追加するだけ。
function change_posts_per_page($query) { /* 管理画面,メインクエリに干渉しないために必須 */ if ( is_admin() || ! $query->is_main_query() ){ return; } /* カテゴリ・タクソノミページの時に、直下の子ページだけ表示。孫ページ以下は表示しない。 */ if ( $query->is_category() || $query->is_tax()) { $term = get_queried_object(); $query->set( 'tax_query', array(array( 'taxonomy' => $term->taxonomy, 'terms' => $term->term_id, 'include_children' => false ))); return; } } add_action( 'pre_get_posts', 'change_posts_per_page' );