[WordPress]カテゴリ毎に記事の一覧を表示して、自由に変更する
WordPressで↓のようにカテゴリ毎に記事の一覧を表示する方法です。
早速ですがテーマに書くコードは↓のようになります。get_categories() でカテゴリを取得して、カテゴリ毎にループさせる形です。
<?php $categories = get_categories(); foreach($categories as $category) : ?> <h1><a href="<?php echo get_category_link( $category->term_id ); ?>"><?php echo $category->cat_name; ?></a></h1> <ul> <?php $args = array( 'cat' => $category->cat_ID ); $query = new WP_Query( $args ); if ( $query ->have_posts() ) : while ( $query ->have_posts() ) : $query ->the_post(); ?> <li><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></li> <?php endwhile; endif; wp_reset_query(); ?> </ul> <?php endforeach; ?>
目次
親カテゴリだけの一覧を表示する
このコードだと小カテゴリも表示されてしまいます。
親カテゴリだけを表示させたい場合はget_categories() の引数に「parent=0」を指定します。
その他のコードは一緒です。
<?php $categories = get_categories('parent=0'); //←parent=0を追加 foreach($categories as $category) : ?> <h1><a href="<?php echo get_category_link( $category->term_id ); ?>"><?php echo $category->cat_name; ?></a></h1> <ul> <?php $args = array( 'cat' => $category->cat_ID ); $query = new WP_Query( $args ); if ( $query ->have_posts() ) : while ( $query ->have_posts() ) : $query ->the_post(); ?> <li><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></li> <?php endwhile; endif; wp_reset_query(); ?> </ul> <?php endforeach; ?>
カテゴリの順序を変更する
さて、先程のコードだと表示されるカテゴリの順序は「カテゴリ名の昇順」で表示されます。
この順序を逆にしたいときは get_categories() に「order=DESC」の引数を与えます。
<?php $categories = get_categories('order=DESC'); //←order=DESCで降順に foreach($categories as $category) : ?> 〜〜以下一緒〜〜
いやいや、名前順じゃなくてカテゴリID順にしたいとか、slug順にしたいとかの場合は「orderby」のパラメータを使って対象を変更します。
例えばカテゴリID順で降順にするときは「‘orderby=id&order=DESC’」を引数にします。
<?php $categories = get_categories('orderby=id&order=DESC'); //←カテゴリIDで降順に foreach($categories as $category) : ?> 〜〜以下一緒〜〜
ソートの対象を指定できる「orderby」には、id、name、slug、count、groupなどが用意されています。初期値が「name」なので、デフォルトでは名前順なのですね。
好きな順序で表示したい
「いやいや、ソートじゃなくて自分の好きな順序でカテゴリを表示したいんだよ!」
とワガママなあなたには「Category Order and Taxonomy Terms Order」プラグインをどうぞ。
管理画面のプラグインから検索でインストール可能です。または↓からダウンロードできます。
Category Order and Taxonomy Terms Order:
https://wordpress.org/plugins/taxonomy-terms-order/
「Category Order and Taxonomy Terms Order」をインストールすると、管理画面上で↓のようにドラッグ&ドロップでカテゴリの順序を自由に変更できるようになります。便利ですね。
この時のコードは何の引数も与えなくでOKです。始めと同じですね。
<?php $categories = get_categories();//←引数なし foreach($categories as $category) : ?> 〜〜以下一緒〜〜
以上、WordPressでカテゴリ毎に記事一覧を表示する方法でした。