絞り込む

Web

カテゴリーとタグを絞り込む

WordPress案件でカテゴリーとタグがうまく絞り込めていなかったので調べることに。その際のメモ。category.phpを作成し、下記のように記載しましたが、一つのカテゴリーだけで絞り込めておらず、全てのカテゴリーが表示されていました。

<?php if(have_posts()): while(have_posts()): the_post(); ?>
<?php endwhile; endif; wp_reset_query(); ?>

各カテゴリー毎に一覧で表示したかったので、下記サイトを参考に絞り込んで表示する方法をさがすことにしました。

WordPressのWP_Queryを使って記事一覧を表示する方法 | 侍エンジニアブログ
この記事では「 WordPressのWP_Queryを使って記事一覧を表示する方法 」といった内容について、誰でも理解で…

cat_IDからカテゴリーを絞り込んでいます。全件表示にしたかったので、posts_per_page-1に。そして、パンくずリストの表示がおかしかったので、理由を探ると、どうもループを終えた後に異常が発生していた模様で、wp_reset_query()を加えると誤表示が無くなりました。あと、pagedはひょっとしたら、あってもなくても変わらないかもしれません。

<?php
$cat = get_category($cat);
$cat_id = $cat->cat_ID ;
$paged = get_query_var('paged') ? get_query_var('paged') : 1;
$args = array(
'posts_per_page' => -1,
'cat' => $cat_id,
'paged' => $paged );
$wp_query = new WP_Query( $args );
?>

<?php if($wp_query->have_posts()) : while($wp_query->have_posts()) : $wp_query->the_post(); ?>
<?php endwhile; wp_reset_postdata(); ?>
<?php else : ?>
<p class="cat__noResult">まだ記事はありません。</p>
<?php endif; wp_reset_query(); ?>

続けて、category.phpを元にしたtag.phpも絞り込めずにいたので、同様に多少変更して使うことに。こちらはslugから絞りこんでいます。

<?php
$tag = get_the_tags();
$tag_slug = $tag[0]->slug;
$paged = get_query_var('paged') ? get_query_var('paged') : 1;
$args = array(
'posts_per_page' => -1,
'tag' => $tag_slug,
'paged' => $paged );
$wp_query = new WP_Query( $args );
?>

<?php if($wp_query->have_posts()) : while($wp_query->have_posts()) : $wp_query->the_post(); ?>
<?php endwhile; wp_reset_postdata(); ?>
<?php else : ?>
<p class="cat__noResult">まだ記事はありません。</p>
<?php endif; wp_reset_query(); ?>

どちらもさほど手間がかからず、希望する形を実装できました。

コメント