logo

小さなお店や女性向け店舗等の
ホームページを作成しております

blog

ブログ

WordPressで各カテゴリーページ一覧のループの書き方

ループ

WordPressのメインクエリとサブクエリの理解不足により、カテゴリーごとのアーカイブページを表示させるのに色々調べましたので、メモします。


目次:

  1. 1.早速サブクエリループの書き方から
  2. 2.ここで苦労した原因
  3. 3.コードの解説
  4. 3.まとめ

早速ループの書き方から

archive.phpに記述した内容です。

  1.           <?php
  2.           $paged = (int) get_query_var('paged');
  3.           $category_slug = get_query_var('category_name');
  4.           $args = array(
  5.             'paged' => $paged,
  6.             'post_type' => 'post',
  7.             'category_name' => $category_slug,
  8.             'posts_per_page' => -1,
  9.             );
  10.           $the_query = new WP_Query( $args );
  11.           if ( $the_query->have_posts() ) : ?>
  12.             <?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
  13.             〜ここに内容を記述〜
  14.             <?php endwhile; ?>
  15.             <?php wp_reset_postdata(); ?>
  16.           <?php endif; ?>

ここで苦労した原因

メインクエリとサブクエリ、ずばりこの理解不足かと思います。
まず、メインクエリというのは、それぞれのページによって、WordPressのほうで基本的に設定されているクエリだということは理解していました。

  • ■トップページ・・・管理画面の「表示設定」で自分で設定した件数の表示
  • ■シングルページ(single.phpなど、個別投稿記事のページ)・・・1件しか表示されない

と、まぁこのくらいの浅い理解だったのです。
では、その他の固定ページ(page.phpなど)ではどうなるのか、はたまたアーカイブページ(archive.phpなど)なら?
ここでつまずいたわけです。

結局↓ここの理解が間違っていたということかな。

  1. ■トップページ・・・管理画面の「表示設定」で自分で設定した件数の表示

 

“管理画面の「表示設定」で設定した件数”は、トップページのみの設定ではなく、これが“メインクエリ”となる設定ということなんですね。

なので、表示設定で、例えば3件表示にしていた場合、シングルページ以外のページでループをメインクエリで使用したら3件しか表示されない、ということになりました。

また、例えば、管理画面の表示設定を10件などにして、トップページのみ3件で設定したい、という場合、function.phpの方へ記述して、フックを使用して設定する他のやり方もあります。気になる方はぜひ調べてみてください。

コードの解説

では、少し、上のコードの解説も書いておきます。

'posts_per_page' => -1,

表示件数を、全件表示にしたかったので、8行目でposts_per_pageを設定しています。
ここで5にしたら5件表示、10にしたら10件表示といった感じです。
-1にした場合、全件表示となります。

$category_slug = get_query_var(‘category_name’);
‘category_name’ => $category_slug,

次に、今回はカテゴリーのアーカイブページ(archive.php)に記述しましたので、カテゴリーも取得してほしかったのです。なので、7行目で’category_name’を3行目で取得したカテゴリーのslugを名前としてとして設定しています。

$pagedの設定

ページ送りを設定するときに必要な記述になります。
今回は、全件表示に設定していますので、特に書かなくてもよいものなのですが、毎回書く習慣にしておくとよいです。

まとめ

今回も、問題にぶち当たったら、ネットで調べまくって原因を突き止めることができました。
下記の方々のブログを参考にさせて頂きました。

WP_Queryでアーカイブページを作る
WordPressでカテゴリーページのみ全件表示する方法

私のブログも少しでも誰かの力になっていたら幸いです。