is_main_query で複数のループを扱う方法
-
メインページ(index.php)で、複数のカテゴリーの情報を、それぞれのカテゴリーごとに「query_posts」を使ってパラメータにカテゴリー名を指定して(’category_name=xxx’)それぞれの情報を表示しているのですが、「is_main_query」を使った方が効率的であるという記事をみつけたので、「is_main_query」を使って以下のように書き換えてみました。
一応「query_posts(‘category_name=xxx’)」をそれぞれカテゴリーごとに記述するのと同じような結果は得られるのですが、果たしてこれで効率的になっているのか自分ではわかりません。
もっと効率的な書き方や、こういう場合は「query_post」を使って書いたほうがいいなどのアドバイスをいただければ大変ありがたいです。以下の場合「news」と「products」のカテゴリーにはそれぞれ複数の子カテゴリーがあります。また、実際にはもう少しカテゴリーがあります。
functions.phpへの記述add_action( 'pre_get_posts', 'modify_category_query' ); function modify_category_query ( $query ) { if ( ! is_admin() && $query->is_main_query() ) { if ( $query->is_home() ) { $query->set( 'category_name', 'news, products' ); } } }
index.php抜粋
<?php if(have_posts()): while(have_posts()): the_post(); ?> <?php $cats = get_the_category(); $cat = $cats[0]; $catname = $cat-> slug; $parent = get_category($cat->parent); $parentname = $parent-> slug; if($parentname == 'news'): //news カテゴリーの情報を表示 ?> <?php the_title(); ?> <?php the_excerpt(); ?> <?php endif; ?> <?php endwhile; ?> <?php endif; ?> <?php if(have_posts()): while(have_posts()): the_post(); ?> <?php $cats = get_the_category(); $cat = $cats[0]; $catname = $cat-> slug; $parent = get_category($cat->parent); $parentname = $parent-> slug; if($parentname == 'products'): //products カテゴリーの情報を表示 ?> <?php the_title(); ?> <?php the_excerpt(); ?> <?php endif; ?> <?php endwhile; ?> <?php endif; ?>
3件の返信を表示中 - 1 - 3件目 (全3件中)
3件の返信を表示中 - 1 - 3件目 (全3件中)
- トピック「is_main_query で複数のループを扱う方法」には新たに返信することはできません。