Uweb

WP_Queryでアーカイブページを作る

こんにちは。やまぐちなな(@nana_winter_web )です。

WP_Queryでカテゴリーアーカイブページを作ろうと思うと、いつも全カテゴリーの記事を取得してきてしまうのでメモしておきます。

今回紹介するコードは、カテゴリーアーカイブ用ですが、必要な情報を取得して、パラメーターを設定すれば他のアーカイブにも応用できます。

コード

functions.php
// アーカイブを表示しているカテゴリーのスラッグを取得
$category_slug = get_query_var('category_name');
$args = array(
  'post_type' => 'post',
  'category_name' => $category_slug // 取得したカテゴリーのスラッグを指定
);
$the_query = new WP_Query($args);
if ($the_query->have_posts()) :
  while ($the_query->have_posts()) : $the_query->the_post();
    // ループ内で出力する内容
  endwhile;
endif;
wp_reset_postdata();

変数argsの中身は必要なパラメーターを付け足してください。

ポイントはコードの2行目と5行目。 アーカイブを表示しているカテゴリーのスラッグを取得し、argscategory_nameに取得したスラッグを指定しています。

全カテゴリーの記事を取得してしまう原因

基本のループなら何もしなくても、そのカテゴリーの記事を取得してくれますが、WP_Queryはカテゴリーも指定しないと、その他の条件に一致する記事すべてを取得してしまうようです。

category_nameに特定のカテゴリーのスラッグを指定するわけにはいかないので、アーカイブを表示しているカテゴリーのスラッグを取得しています。

まとめ

カテゴリーは、指定しなくても自動でやってくれると思っていたのですが、そうではないようです。
同じ現象で困っている方は参考にしてみてください。

もう少し工夫すれば、カテゴリーだけでなく、日付のアーカイブなどを兼用させることもできそうです。

以上、WP_Queryを使ったカテゴリーアーカイブページの作り方でした。

シェア

最新記事