こんにちは。やまぐちなな(@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行目。 アーカイブを表示しているカテゴリーのスラッグを取得し、argsのcategory_nameに取得したスラッグを指定しています。
全カテゴリーの記事を取得してしまう原因
基本のループなら何もしなくても、そのカテゴリーの記事を取得してくれますが、WP_Queryはカテゴリーも指定しないと、その他の条件に一致する記事すべてを取得してしまうようです。
category_name
に特定のカテゴリーのスラッグを指定するわけにはいかないので、アーカイブを表示しているカテゴリーのスラッグを取得しています。
まとめ
カテゴリーは、指定しなくても自動でやってくれると思っていたのですが、そうではないようです。
同じ現象で困っている方は参考にしてみてください。
もう少し工夫すれば、カテゴリーだけでなく、日付のアーカイブなどを兼用させることもできそうです。
以上、WP_Queryを使ったカテゴリーアーカイブページの作り方でした。