【wordpress】カテゴリー別記事一覧リストの出力方法

今回の内容はwordpressのループ出力方法についてです。

親カテゴリーの一覧を出力させながら、それに所属する記事も一覧でリスト化していきます。

利用するwordpressの関数はこちら

  • get_terms
  • get_posts

どちらもよく使うので、使い方を覚えて置くと便利です。

今回は子カテゴリーについては考えません。

カテゴリーに階層をつけて記事を管理している方は使えないかもしれませんが、また別の機会で親カテゴリー別子カテゴリー別の記事一覧リストも作成したいと思います。

親カテゴリーの一覧を取得

カテゴリーの取得にはいろんな関数がありますが、get_termsで統一して良いんじゃないかなと思います。

get_termsは引数にタクソノミーを設定することで、カテゴリーやタグはもちろんんこと、カスタムタクソノミーの一覧も取得することができます。

get_termsの引数に「parent => 0」を設定することで、最上位のカテゴリーだけを取得できます。

$args = array(
   'parent' => 0
);
$parent_cats = get_terms('category', $args);
var_dump($parent_cats); 
 
foreach ($parent_cats as $v) {
   var_dump($v); 
   $post_list = get_post_list($v->term_id);
}
unset($v);

var_dumpで$parent_catsの確認すると、ちゃんと取得できているのがわかるでしょう。

$parent_catsの中身はforeachを使って取り出し、後で作るget_post_listという関数に渡せるようにしおきます。

記事一覧を取得する関数を作成

次はget_postsを利用するためにget_post_listという関数を作成します。

先程のget_termsで取得した値からIDを取り出して、こちらの関数に渡します。

渡された関数を使ってget_termsの引数を設定していきます。

引数の設定には、カスタムタクソノミーが今後増える可能性を考慮し、tax_queryを使っておいた方が良いでしょう。

//記事一覧取得
function get_post_list($cats_id)
{
   $args = array(
       'posts_per_page' => -1,
       'tax_query' => array(
           array(
               'taxonomy' => 'category',
               'terms' => $cats_id
           )
       )
   );
   $posts_data = get_posts($args);
   $post_list = '<ul>';
   foreach ($posts_data as $v) {
       $post_list .= '<li>' . $v->post_title . '</li>';
   }
   unset($v);
   $post_list .= '</ul>';
   return $post_list;
}

functions.phpでまとめる

関数を使わずにだらだらテーマに記述していくのは見通しが悪くなるので、長くなるようでしたら最低限関数化しておく事をオススメします。

//カテゴリーリスト表示
function the_cats_post_list()
{
   print '<ul class="parent">';
   $args = array(
       'parent' => 0
   );
   $parent_cats = get_terms('category', $args);
   foreach ($parent_cats as $v) {
       $post_list = get_post_list($v->term_id);
 
       print <<< EOT
           <li>
               {$v->name}
               <ul class="children">
                   {$post_list}
               </ul>
           </li>
EOT;
   }
   unset($v);
   print '</ul>';
}
 
 
//記事一覧取得
function get_post_list($cats_id)
{
   $args = array(
       'posts_per_page' => -1,
       'tax_query' => array(
           array(
               'taxonomy' => 'category',
               'terms' => $cats_id
           )
       )
   );
   $posts_data = get_posts($args);
   $post_list = '<ul>';
   foreach ($posts_data as $v) {
       $post_list .= '<li>' . $v->post_title . '</li>';
   }
   unset($v);
   $post_list .= '</ul>';
   return $post_list;
}

テーマのダウンロード

参考ようにテーマのサンプルも作成しましたので、ご自由にどうぞ。

正社員という奴隷制度に中指を立てるWebエンジニアです。PHPが得意。繋がれた鎖を断ち切るために、自由を取り戻すために、プログラミングスキルを磨く日々です。プログラミングと個人でもできるビジネスについて、情報発信しています。

詳しくはこちら