[WordPress]カテゴリ毎に記事の一覧を表示して、自由に変更する

WordPressで↓のようにカテゴリ毎に記事の一覧を表示する方法です。

スクリーンショット 2014-06-22 11.33.19


早速ですがテーマに書くコードは↓のようになります。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」には、idnameslugcountgroupなどが用意されています。初期値が「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」をインストールすると、管理画面上で↓のようにドラッグ&ドロップでカテゴリの順序を自由に変更できるようになります。便利ですね。

スクリーンショット 2014-06-22 11.51.14

 

この時のコードは何の引数も与えなくでOKです。始めと同じですね。

<?php
$categories = get_categories();//←引数なし
foreach($categories as $category) :
?>
〜〜以下一緒〜〜

 

以上、WordPressでカテゴリ毎に記事一覧を表示する方法でした。

この記事を書いた人:

ナカシマ

北区赤羽在住のWEBデザイナー兼エンジニア。インターネット、WordPress、本・漫画、音楽が大好き。妻と猫と暮らすアップル信者。

BLOG: 着ぐるみ追い剥ぎペンギン