no-image

WordPressのカテゴリページやタクソノミページで直下の子ページだけを表示する

カテゴリや階層型タクソノミに直接紐づくページだけを表示

WordPressのカテゴリや階層型タクソノミのページは、直接紐づいている記事だけでなく、子カテゴリや孫カテゴリに紐づいている記事も全部表示されてしまいます。

かといって、archive.phpcategory.phpWP_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' );
pocketlinehatebuimagegalleryaudiovideocategorytagchatquotegoogleplusfacebookinstagramtwitterrsssearchenvelopeheartstaruserclosesearch-plushomeclockupdateeditshare-squarechevron-leftchevron-rightleafexclamation-trianglecalendarcommentthumb-tacklinknaviconasideangle-double-upangle-double-downangle-upangle-downstar-halfstatus